Hibernate jpa 确实尊重 AttributeConveter
Hibernate jpa does honour AttributeConveter
我定义了这样一个属性转换器:
@Converter(autoApply = true)
public class MyConverter implements AttributeConverter<MyType, String> {
@Override
@Nullable
public String convertToDatabaseColumn(@Nullable final MyType attribute) {
LOG.log(Level.INFO, "Converting '{'{0}'}' to DB column", attribute);
return attribute != null ? map(attribute) : null;
}
@Override
@Nullable
public MyType convertToEntityAttribute(@Nullable final String dbData) {
LOG.log(Level.INFO, "Converting '{'{0}'}' to type", dbData);
return dbData != null ? map(dbData) : null;
}
}
然后在我的实体中 class:
@Entity
public class MyEntity implements Serializable {
@Id
private Long id;
private MyType myData;
}
根据 jpa2.1 规范,如果我在转换器上指定了 autoApply,则不必使用 @Convert 注释属性字段。
尽管如此,即使我没有在转换器上指定自动应用并指定以下内容:
@Entity
public class MyEntity implements Serializable {
@Id
private Long id;
@Convert(converter = MyConverter.class)
private MyType myData;
}
Hibernate 仍然不考虑这个转换器。
我做错了什么?
我删除了 table 并重新生成了它,但没有任何帮助。
我尝试过 4.3.4 - 4.3.8 的休眠版本,但没有成功,n wildfly 8.1
顺便说一下,我的转换器是在实体 jar 中声明的,然后作为依赖项包含在 ejb-jar 中。
嗯。
几个小时后,解决方案似乎很简单。
我的错误是我在 ejb-jars persistence.xml 中声明了 类,而不是指定 jar 文件元素。因此,jpa hibernate 注释引擎不知道我的 entity-jar,也无法扫描它以查找 Converter 注释
我定义了这样一个属性转换器:
@Converter(autoApply = true)
public class MyConverter implements AttributeConverter<MyType, String> {
@Override
@Nullable
public String convertToDatabaseColumn(@Nullable final MyType attribute) {
LOG.log(Level.INFO, "Converting '{'{0}'}' to DB column", attribute);
return attribute != null ? map(attribute) : null;
}
@Override
@Nullable
public MyType convertToEntityAttribute(@Nullable final String dbData) {
LOG.log(Level.INFO, "Converting '{'{0}'}' to type", dbData);
return dbData != null ? map(dbData) : null;
}
}
然后在我的实体中 class:
@Entity
public class MyEntity implements Serializable {
@Id
private Long id;
private MyType myData;
}
根据 jpa2.1 规范,如果我在转换器上指定了 autoApply,则不必使用 @Convert 注释属性字段。 尽管如此,即使我没有在转换器上指定自动应用并指定以下内容:
@Entity
public class MyEntity implements Serializable {
@Id
private Long id;
@Convert(converter = MyConverter.class)
private MyType myData;
}
Hibernate 仍然不考虑这个转换器。
我做错了什么? 我删除了 table 并重新生成了它,但没有任何帮助。
我尝试过 4.3.4 - 4.3.8 的休眠版本,但没有成功,n wildfly 8.1
顺便说一下,我的转换器是在实体 jar 中声明的,然后作为依赖项包含在 ejb-jar 中。
嗯。
几个小时后,解决方案似乎很简单。 我的错误是我在 ejb-jars persistence.xml 中声明了 类,而不是指定 jar 文件元素。因此,jpa hibernate 注释引擎不知道我的 entity-jar,也无法扫描它以查找 Converter 注释