首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Embeddable类中的JPA @版本

@Embeddable类中的JPA @版本
EN

Stack Overflow用户
提问于 2014-07-03 10:47:21
回答 1查看 3.1K关注 0票数 4

当我在@Embeddable中使用JPA @Version注释时,我会看到以下异常指向我的Updateable类:

代码语言:javascript
复制
org.hibernate.AnnotationException: Unable to define @Version on an embedded class

这是我的代码:

代码语言:javascript
复制
@Embeddable
public class Updateable {
    @Version
    private long modcount;

    private String updatedBy;

    private DateTime updatedAt;

    // getters & setters
}
代码语言:javascript
复制
@Entity
public class SomeEntity  {
    @Id
    private Long id;

    @Embedded
    private Updateable updateAudit;

    // other stuff

}

是否不可能在@Embeddable中有一个@版本,或者这个Hibernate是特定的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-03 10:53:51

可嵌入类只是声明可重用实体元素的一种方便的方法,即您的Updateable可以在其他实体中使用,而不必再次添加字段和映射。

因此,可嵌入性是实体的一部分(顾名思义,它们是嵌入的),因此独立的版本控制没有意义。

仅将@Version注释添加到可嵌入中也没有多大意义,因为嵌入本身不能进行版本化,而且您必须处理单个实体中包含多个可嵌入项的情况(例如,在这种情况下应该使用哪个版本)。因此,由于@Version只对实体有意义,因此只允许对实体或映射的超类进行注释就更容易了。

实际上,尽管JPA规范建议版本属性是数字的,但是字符串或时间戳Hibernate似乎提供了用户定义的版本类型

version列可以是数字(推荐的解决方案)或时间戳。Hibernate支持任何类型,只要您定义和实现适当的UserVersionType。

因此,如果您想使用Updateable作为您的版本,您可能能够做的事情(不是测试,只是从文档派生出来的)是为Updateable提供一个自定义用户类型,然后按如下方式使用:

代码语言:javascript
复制
@Entity
public class SomeEntity  {
  @Id
  private Long id;

  @Type( "your.custom.UserVersionType" )
  @Version
  private Updateable updateAudit;

  // other stuff
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24551623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档