JPA:覆盖子类中的映射

时间:2015-12-17 11:02:57

标签: hibernate jpa

我正在构建一个基于开源项目的应用程序。这个项目定义了自己的模型和jpa映射,我想重用这个模型。我正在使用Hibernate,就像在最初的开源项目中一样。

我的项目有特殊性,所以我有自定义类,用自定义字段扩展开源项目类。

举个例子:

开源项目:

@Entity
public class AType {

    @ManyToOne(fetch = FetchType.LAZY , cascade = { CascadeType.PERSIST})
    @JoinColumn(name = "btype_id")
    private BType bTypeField;


    @Column(name=basicField)
    private String basicField;

}

在我的项目中

@Entity
public class CustomAType extends AType {

@ManyToOne(fetch = FetchType.LAZY , cascade = { CascadeType.PERSIST})
@JoinColumn(name = "btype_id")
    private CustomBType customBTypeField;

}

在CustomBType类中,除了BType属性外,我还有特定的属性。

要在CustomAType中获取CustomBType的实例,我需要重新声明映射,因此JPA使我将两个映射中的一个标记为只读(updatable = false,insertable = false)。

@ManyToOne(fetch = FetchType.LAZY , cascade = { CascadeType.PERSIST})
@JoinColumn(name = "btype_id", insertable=false, updatable=false)
    private CustomBType customBTypeField;

}

当我将开源项目作为maven dep时,我无法触及映射定义(或者我可以吗?)。所以我认为我的自定义映射是只读的,我不能再插入自定义对象了。

所以我的问题:

  • 有没有办法让原始地图只读,而不是我的?
  • 有没有更好的方法来重用JPA模型?

1 个答案:

答案 0 :(得分:1)

  

当我将开源项目作为maven dep时,我无法触及   映射定义(或者我可以吗?)。

JPA允许通过XML配置文件覆盖或禁用类中的JPA注释。

在回答您的问题时,您可以在不触及来源的情况下更改映射:

https://docs.jboss.org/hibernate/stable/annotations/reference/en/html/xml-overriding.html#d0e3768