Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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/Hibernate:在复杂类上使用AttributeConverter时,创建用户类型是显而易见的吗?_Java_Hibernate_Jpa_Orm - Fatal编程技术网

Java JPA/Hibernate:在复杂类上使用AttributeConverter时,创建用户类型是显而易见的吗?

Java JPA/Hibernate:在复杂类上使用AttributeConverter时,创建用户类型是显而易见的吗?,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,我想将任意POJO类属性映射为字符串和属性转换程序,但我得到以下结果: 警告:找不到请求的Java类[SomeClass]的匹配类型描述符;使用回退 这是否意味着AttributeConverter还不够,我需要为每个复杂类编写一个自定义的UserType,以便能够将其转换为字符串 需要@embeddeble。这里更合适吗 @Entity public class SomePersistentClass { @Id int id; @Convert(converter

我想将任意POJO类属性映射为
字符串
属性转换程序
,但我得到以下结果:

警告:找不到请求的Java类[SomeClass]的匹配类型描述符;使用回退

这是否意味着
AttributeConverter
还不够,我需要为每个复杂类编写一个自定义的
UserType
,以便能够将其转换为
字符串

需要
@embeddeble
。这里更合适吗

@Entity
public class SomePersistentClass {
    @Id
    int id;

    @Convert(converter = SomeClassConverter.class)
    public SomeClass attribute;

    //...
}

public class SomeClass {
    //...
}
使用

  • @Named

  • 实现转换器

  • 重写getAsObject和getAsString方法


  • 旧问题,但截至Hibernate 5.2.7(2017年1月24日),此警告更改为:

    WARN org.hibernate.type.descriptor.java.JavaTypeDescriptor注册表- HH000481:遇到Java类型[class SomeClass],我们可以为其 找不到JavaTypeDescriptor,并且它似乎没有实现 等于和/或哈希代码。这可以带来显著的性能 执行涉及此Java的相等/脏检查时出现问题 类型。考虑注册自定义JavaType描述符或至少 实现equals/hashCode。因此,有以下解决方案:

    要解决这个问题,只需确保您的类型实现equals和hashcode,并用Immutable.class注释它,以防它是不可变的


    请参阅:

    对于其他JPA实现(例如DataNucleus),这就足够了,因为AttributeConverter是一条说明“作为支持的类型持久化”的指令。如果Hibernate要求这样做,那么您将有权向他们提出问题什么是
    @Named?
    Hibernate和JPA没有此注释。你能举个例子吗?@Named应该是JavaEE6的标准,它与CDI相关,如果用户没有使用JavaEE或CDI?!哦,我明白了,我们正在讨论转换的不同方面,你的应该与此相关: