当前位置: 首页 > 面试题库 >

没有ID的JPA实体

阎修杰
2023-03-14
问题内容

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

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;

    ...
}


 类似资料:
  • 问题内容: 我想创建一个类,该类可以映射到使用JPA本机查询从数据库中提取的结果。有没有办法将没有基础表的实体映射到结果?我提到这个链接,使得它的hibernate。可以使用JPA代替吗? 这是我要为其映射结果的班级。 问题答案: JPA 2.1规范定义了将结果从本机查询返回到非实体类的方法 您应该检出标题 3.10.16.2返回非托管实例, 尤其是 3.10.16.2.2构造函数结果 使用 Sq

  • 我想创建一个可以映射到使用JPA原生查询从数据库提取的结果的类。有没有办法将没有基础表的实体映射到结果?我提到了这个允许它Hibernate的链接。这可以用JPA来代替吗? 这是我想要映射结果的类。

  • 问题内容: 有谁知道我该如何在hibernate状态下做到这一点: 使用JPA? EntityManager有一个contains方法,但仅此而已! 我正在编写一些代码,充当实体和会话中存储的数据之间的转换器(因此,不是存储序列化的对象,而是仅存储类名和ID)。 问题答案: 有谁知道我可以用JPA在hibernate(…)中做到这一点? JPA 1.0没有等效的功能,因此如果您坚持使用JPA 1.

  • 问题内容: 您实体的ID是 长 (原始类型)还是 长 (对象类型)? 该ID是表的主键,在数据库中从不为“ null”。 我的同事建议使用“对象类型长”。 默认情况下,Hibernate反向工程工具会生成一个长为id的基本类型。 选择什么? 长还是长? 问题答案: 我认为使用Long更好,因为通过检查该值来检查实体是否具有持久身份是更正确的(在MySQL中,您可以将ID设置为0)。另外,像Spri

  • 问题内容: 有一个奇怪的问题,无法弄清楚如何处理。有简单的POJO: 其余端点: 在json响应中,除了Id之外,还有其他所有字段,我需要在前端编辑/删除人员。如何配置Spring Boot来序列化ID? 这就是现在的响应: UPD具有双向hibernate映射,可能与问题有关。 问题答案: 我最近遇到了同样的问题,这是因为默认情况下是这样工作的。请参阅我的SO问题-> 在将应用程序迁移到Spri

  • 我有一个JPA实体的类层次结构,基类是定义了一个ID的MappedSuperclass。我试图在子类中使用复合键,但这似乎不起作用