我有一个模型,每个类都扩展了实体:
@MappedSuperclass
public abstract class Entity implements Serializable {
private Long id;
.
.
.
}
现在,在我的模型中,每个实体都可以有一个属性:
@javax.persistence.Entity
public class Attribute extends Entity {
private Entity entity;
private String name;
private String value;
.
.
.
}
我的问题是:如何映射类Attribute的实体属性?我的想法是将此属性存储为entityClass和entityId,但我仍然不知道如何使用JPA实现此目的?
扩展实体的具体类的示例:
@javax.persistence.Entity
public class Ball extends Entity {
private Set<Attribute> attributes;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "entity")
public Set<Attribute> getAttributes() {
return attributes;
}
public void setAttributes(Set<Attribute> attributes) {
this.attributes = attributes;
}
}
答案 0 :(得分:1)
在JPA中没有简单的方法可以做到这一点。您可以将关系映射为@Transient,并为id和类添加两个@Basic映射(可能使用属性get / set方法)。然后在模型代码中执行查询。
如果您使用的是EclipseLink,则可以使用@VariableOneToOne,
请参阅,
http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_variableonetoone.htm#CHDDFDGF
答案 1 :(得分:0)
根据您的评论,您需要在映射的超类中建立双向关系。不幸的是,你不能在JPA中这样做。原因是MappedSuperClass
不是实体,MappedSuperClass
的字段属于不同的子类。
来源JPA 2.0 Specs(2.11.2)
(我不知道你想做什么但是:)
看来你正试图坚持你的持久模型的元模型。如果您需要阅读它:您可以使用EntityManagerFactory.getMetamodel()