如何为同一个实体配置多个一对多关系?
考虑两个班级 Boy 和 Toy。它们看起来如下所示
class Boy {
@OneToMany(mappedBy='ownedBy',fetch=FetchType.EAGER, cascade=CascadeType.ALL)
private List<Toy> bikes;
...
@OneToMany(mappedBy='ownedBy',fetch=FetchType.EAGER, cascade=CascadeType.ALL)
private List<Toy> cars;
...
class Toy {
@ManyToOne
private Boy ownedBy;
...
我知道这个配置是错误的。但是我不知道这里需要配置什么。两边的@OneToMany
和注解应该做什么样的配置?@ManyToOne
在将“mappedBy”添加到注释之前,我收到了以下异常消息
java.sql.SQLException: Field 'cars_Id' doesn't have a default value
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2683)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2144)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2444)
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1997)
但是当注释中没有添加“mappedBy”时,会创建一个像“boy_toy”这样的连接表。添加后,我看不到在数据库中创建的表。
- 更新
boy_toy 表也有三列,即 boy_id、cars_id 和 bikes_id。但理想情况下,它应该像 boy_id 一个 not null 和其他可为空的列。但是生成的所有列都不可为空。我试图从注释中删除“mappedBy”并手动编辑表结构以使cars_id 和bikes_id 可以为空。它就像一个奇迹。
所以现在,我唯一剩下的问题是
我们如何指示 hibernate 配置一个带有可空列和不可空列的连接表?