当我在@Embeddable中使用JPA @Version注释时,我会看到以下异常指向我的Updateable类:
org.hibernate.AnnotationException: Unable to define @Version on an embedded class这是我的代码:
@Embeddable
public class Updateable {
@Version
private long modcount;
private String updatedBy;
private DateTime updatedAt;
// getters & setters
}@Entity
public class SomeEntity {
@Id
private Long id;
@Embedded
private Updateable updateAudit;
// other stuff
}是否不可能在@Embeddable中有一个@版本,或者这个Hibernate是特定的?
发布于 2014-07-03 10:53:51
可嵌入类只是声明可重用实体元素的一种方便的方法,即您的Updateable可以在其他实体中使用,而不必再次添加字段和映射。
因此,可嵌入性是实体的一部分(顾名思义,它们是嵌入的),因此独立的版本控制没有意义。
仅将@Version注释添加到可嵌入中也没有多大意义,因为嵌入本身不能进行版本化,而且您必须处理单个实体中包含多个可嵌入项的情况(例如,在这种情况下应该使用哪个版本)。因此,由于@Version只对实体有意义,因此只允许对实体或映射的超类进行注释就更容易了。
实际上,尽管JPA规范建议版本属性是数字的,但是字符串或时间戳Hibernate似乎提供了用户定义的版本类型。
version列可以是数字(推荐的解决方案)或时间戳。Hibernate支持任何类型,只要您定义和实现适当的UserVersionType。
因此,如果您想使用Updateable作为您的版本,您可能能够做的事情(不是测试,只是从文档派生出来的)是为Updateable提供一个自定义用户类型,然后按如下方式使用:
@Entity
public class SomeEntity {
@Id
private Long id;
@Type( "your.custom.UserVersionType" )
@Version
private Updateable updateAudit;
// other stuff
}https://stackoverflow.com/questions/24551623
复制相似问题