Java JPA/Hibernate:在复杂类上使用AttributeConverter时,创建用户类型是显而易见的吗?
我想将任意POJO类属性映射为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
字符串
和属性转换程序
,但我得到以下结果:
警告:找不到请求的Java类[SomeClass]的匹配类型描述符;使用回退
这是否意味着AttributeConverter
还不够,我需要为每个复杂类编写一个自定义的UserType
,以便能够将其转换为字符串
需要@embeddeble
。这里更合适吗
@Entity
public class SomePersistentClass {
@Id
int id;
@Convert(converter = SomeClassConverter.class)
public SomeClass attribute;
//...
}
public class SomeClass {
//...
}
使用
旧问题,但截至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?!哦,我明白了,我们正在讨论转换的不同方面,你的应该与此相关: