【问题标题】:hibernate one-to-many without DB relation mapping没有数据库关系映射的休眠一对多
【发布时间】:2016-06-19 02:33:39
【问题描述】:

如果我在休眠中应用一对多关系,我的代码会工作吗? 仅适用于 Java 中的实体端,而不适用于 DB 端(表之间不会有外键,我不想修改表)?

问题编辑如下。

这是我的表格 - 一名员工有很多证书

Emp表-->

   id (Primary key)

   first_name

   last_name

   salary

   emp_id

证书表 -->

   id (primary key)

   certificate_name 

   cert_id

这里,这些表数据与emp_idcert_id相关。(表中没有关系。但是查看现有系统中的数据它们是相关的)

由于它是一个现有的数据库,我不想更改表并在数据库中添加外键关系。 我只想从休眠端添加关系。是否可以。 ?

【问题讨论】:

  • 请添加您的实体。

标签: hibernate one-to-many


【解决方案1】:

首先,Hibernate 在数据库端不需要 ForeignKey 关系。 如果你关闭了 hbm2ddl,hibernate 将不会创建一个。

只需将其声明为正常的一对多关系,hibernate 就会为员工制作一组证书。请务必使用 Set 或 Bag not List,因为 List 需要索引列。

【讨论】:

    【解决方案2】:

    尝试仅引用 id 字段而不是证书实体中的实体。您的员工实体将保持不变,但没有 @OneToMany 关系。在您的证书实体中而不是这样做:

    @ManyToOne
    @JoinColumn(name="EMPLOYEE_ID")
    Employee employee
    

    这样做:

    @Column(name="EMPLOYEE_ID")
    Integer employeeId;
    

    【讨论】:

      【解决方案3】:

      如果主键相同,这就是正式的、纯粹的一对一关系,可以这样映射。数据库中没有你需要额外的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-07
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多