gpt4 book ai didi

java - hibernate : unideirection @onetoone with cascade enable

转载 作者:行者123 更新时间:2023-11-30 06:49:44 26 4
gpt4 key购买 nike

我在 Flight(Parent) 和 Airline(Child) 之间有一个单向的一对一映射,下面是我的代码-

public class Airline {
..
@OneToOne(cascade=CascadeType.ALL)
Flight flight;
}

航类没有任何 Airline 的引用,它有 id,命名他们的 getter 和 setter。

我坚持使用 airline 并启用级联。

    Flight flight= new Flight();
flight.setName("flight2");

Airline airline= new Airline();
airline.setName("Air India");
airline.setFlight(flight);

Session session=sessionFactory.openSession();
session.saveOrUpdate(airline);
session.saveOrUpdate(flight);

这会引发异常 MySQLSyntaxErrorException:“字段列表”中的未知列“flights_id”。所以我添加了 @JoinColumn 这要归功于答案。

编辑----

但我做了一个没有mappedby的双向(即两个单向关联)并且没有在第二个表中应用@joinColumn即

public class Airline {
@JoinColumn("flight_ref_id")
@OneToOne(cascade=CascadeType.ALL)
Flight flight;
}


public class Flight {
@OneToOne(cascade=CascadeType.ALL)
Airline airline;
}

    airline.setFlight(flight);
flight.setAirLine(airline)
Session session=sessionFactory.openSession();
session.saveOrUpdate(airline);

现在也不异常(exception)了,Flight里连@joincolumn都没有了。它创建了column airline_id 为什么?

mysql> select * from Airline;
+----+-----------+---------------+
| id | name | flight_ref_id |
+----+-----------+---------------+
| 1 | Air India | NULL |
+----+-----------+---------------+
1 row in set (0.00 sec)

mysql> select * from Flight;
+----+--------+------------+
| id | name | airline_id |
+----+--------+------------+
| 1 | Del-NJ | 1 |
+----+--------+------------+

而在数据库中 flight_ref_id 为 null。为什么?

最佳答案

需要添加@JoinColumn注解来增加一列作为航类外键

public class Airline {
..
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "flights_id", nullable = false)
Flight flight;
}

关于java - hibernate : unideirection @onetoone with cascade enable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42340364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com