Hibernate 在 MySQL DB 中创建一对多关系,而指定一对一

hibernate creates one to many relationship in mysql db, while one to one specified

提问人:Michał Zając 提问时间:10/21/2023 最后编辑:SternKMichał Zając 更新时间:10/21/2023 访问量:47

问:

使用 Hibernate 定义@OneToOne关系后,我在 MySQL 数据库中有一对多关系。

一对多关系:

one to many relationship

是犯了错误,还是 Hibernate 管理一对一关系的方式?

我什至尝试过这个解释关系的网站的明显例子:https://www.baeldung.com/jpa-hibernate-associations

法典:

    @Entity
    public class Employee {
     
        @Id
        private Long id;
     
        @OneToOne
        @JoinColumn(name = "parking_spot_id")
        private ParkingSpot parkingSpot;
     
    }
    
    @Entity
    public class ParkingSpot {
     
        @Id
        private Long id;
     
    }
java mysql spring hibernate jpa

评论

0赞 Black Bear 10/21/2023
一对一和无对多关系在概念上是不同的,Hibernate 不会这样做,多对多关系仅使用两个一对多关系来定义,因此请确保删除现有数据库(如果可能),然后运行代码再次创建表,如果可以,请提供更多项目的代码部分,例如配置, 等
0赞 Michał Zając 10/22/2023
我已经删除并执行了几次代码(同时删除数据库表),使用不同的配置,并且所有这些都在MySQL数据库结构中创建了一对多的关系(一对一教程中的示例:baeldung.com/jpa-one-to-one)。那么,这是否意味着 Hibernate 无法建立实际的一对一关系呢?

答:

0赞 Baranovich 10/21/2023 #1

MySQL 数据库中的关系不依赖于 Hibernate 关系定义。Hibernate 注解@OneToOne用于为程序指定特定的关系 - 因此 Hibernate 将期望数据库中已经存在的相应表具有一对一的关系。如果你想在数据库中获得一对一的关系,只需删除具有一对多关系的旧表,然后使用一对一创建新表(使用本教程 - https://dotnettutorials.net/lesson/database-relationships-in-mysql/) - 你不需要 Hibernate。

评论

0赞 Michał Zając 10/22/2023
我知道这在MySQL中是可能的,我只是想用Hibernate定义整个数据库。那么这是否意味着我无法定义一对一的关系,这将在MySQL中以这种方式设置,只是休眠?
0赞 Baranovich 10/22/2023
是的,这确实是这个意思