我有一个结构如下的数据库:
CREATE TABLE entity (
id SERIAL,
name VARCHAR(255),
PRIMARY KEY (id)
);
CREATE TABLE entity_property (
entity_id SERIAL,
name VARCHAR(255),
value TEXT
);
当我尝试创建 EntityProperty 类时
@Entity
@Table(name="entity_property")
public class EntityProperty {
private String name;
private String value;
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="value", nullable=true, length=255)
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
我得到以下异常:
org.hibernate.AnnotationException: No identifier specified for entity: package.EntityProperty
我知道 JPA 实体必须有一个主键,但由于我无法控制的原因,我无法更改数据库架构。是否可以创建将与这样的数据库模式一起使用的 JPA (Hibernate) 实体?
最佳答案
我猜你的 entity_property
有一个复合键 (entity_id, name)
在哪里 entity_id
是 entity
的外键.如果是这样,您可以将其映射如下:
@Embeddable
public class EntityPropertyPK {
@Column(name = "name")
private String name;
@ManyToOne
@JoinColumn(name = "entity_id")
private Entity entity;
...
}
@Entity
@Table(name="entity_property")
public class EntityProperty {
@EmbeddedId
private EntityPropertyPK id;
@Column(name = "value")
private String value;
...
}
关于java - 没有 id 的 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3820897/