Java 如何将JPA AttributeConverter与Hibernate映射XML(HBM 4.3)一起使用?
我正在尝试将数据库中的一种类型转换为另一种类型,以便在实体中使用。通过一些研究,我发现了JPA2.1中定义的AttributeConverter类 我的类都是从Avro生成的,因此不会使用JPA/HBM注释 所有类都使用hbm.xml文件映射,而不是实体映射 所有数据库连接都可以读写。所以hbm配置是正确的,只是类型转换有问题Java 如何将JPA AttributeConverter与Hibernate映射XML(HBM 4.3)一起使用?,java,hibernate,hibernate-mapping,jpa-2.1,hibernate-4.x,Java,Hibernate,Hibernate Mapping,Jpa 2.1,Hibernate 4.x,我正在尝试将数据库中的一种类型转换为另一种类型,以便在实体中使用。通过一些研究,我发现了JPA2.1中定义的AttributeConverter类 我的类都是从Avro生成的,因此不会使用JPA/HBM注释 所有类都使用hbm.xml文件映射,而不是实体映射 所有数据库连接都可以读写。所以hbm配置是正确的,只是类型转换有问题 Relevant Tech Stack - HB Version: 4.3.11.Final JPA Version: 2.1 我试图简单地添加转换器作为类型 这是我
Relevant Tech Stack
-
HB Version: 4.3.11.Final
JPA Version: 2.1
我试图简单地添加转换器作为类型
这是我唯一能想到的尝试。在我的实现无法实现的注释之外
class.hbm.xml
<hibernate-mapping default-lazy="false">
<class name="ACLASS" table="CASE">
<id name="id" type="long" column="id">
<generator class="native"/>
</id>
<property name="aColumn" type = "dao.converter.DateToLongConverter" column = "A_COLUMN" />
</class>
</hibernate-mapping>
我从未使用.xml config定义过持久实体,但我希望它能帮助: 您正在为“aColumn”定义一个类型
dao.converter.DateToLongConverter
,但实际上,您应该为它定义一个转换器。您提到的类型应该是您在代码中使用的类型对象:在您的示例中,您的类型应该是Long
另一个将帮助您在xml配置上定义转换器。它只是类型名称的另一种格式
这就是如何使用注释定义@Convert
。您应该希望在hbm上复制此模板
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Convert(converter = DateToLongConverter.class)
private Long aColumn;
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence
version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="case-consumer-persistence">
<class>dao.converter.DateToLongConverter</class>
<class>aClass</class>
</persistence-unit>
</persistence>
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Convert(converter = DateToLongConverter.class)
private Long aColumn;
}