java - 没有 id 的 JPA 实体

标签 java hibernate jpa

我有一个结构如下的数据库:

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_identity 的外键.如果是这样,您可以将其映射如下:

@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/

相关文章:

java - 扩展类和实现的接口(interface)具有相同的方法名

java - JPA 乐观锁定规范是否支持根据客户端提供的版本进行验证

java - 如何生成Hibernate字段注释?

java - 在 JPA QL 中,如何按项目类别选择所有国家/地区?

java - @OneToOne 删除一个 child

java - RSS 阅读器为 ListView 创建自定义适配器

java - 在 Java 中命名新实例

java - 创建类对象列表以将它们与另一个类对象进行比较

java - 为什么多对一双向关联需要update和insert设置为false

java - Spring Data REST 和 IdClass - 不兼容?