我正在构建一个基于开源项目的应用程序。这个项目定义了自己的模型和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时,我无法触及映射定义(或者我可以吗?)。所以我认为我的自定义映射是只读的,我不能再插入自定义对象了。
所以我的问题:
答案 0 :(得分:1)
当我将开源项目作为maven dep时,我无法触及 映射定义(或者我可以吗?)。
JPA允许通过XML配置文件覆盖或禁用类中的JPA注释。
在回答您的问题时,您可以在不触及来源的情况下更改映射:
https://docs.jboss.org/hibernate/stable/annotations/reference/en/html/xml-overriding.html#d0e3768