Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JPA AttributeConverter与Hibernate映射XML(HBM 4.3)一起使用?_Java_Hibernate_Hibernate Mapping_Jpa 2.1_Hibernate 4.x - Fatal编程技术网

Java 如何将JPA AttributeConverter与Hibernate映射XML(HBM 4.3)一起使用?

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 我试图简单地添加转换器作为类型 这是我

我正在尝试将数据库中的一种类型转换为另一种类型,以便在实体中使用。通过一些研究,我发现了JPA2.1中定义的AttributeConverter类

我的类都是从Avro生成的,因此不会使用JPA/HBM注释

所有类都使用hbm.xml文件映射,而不是实体映射 所有数据库连接都可以读写。所以hbm配置是正确的,只是类型转换有问题

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;
}