java Hibernate在两个字段上的单向映射
我有一个生物类和物品类:
我需要生物中的单向映射,如下所示:
@Entity
public class Creature {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToMany(cascade = CascadeType.ALL)
private List<Item> equippedItems;
@OneToMany(cascade = CascadeType.ALL)
private List<Item> itemsInBackpack;
//getters/setters
}
Hibernate创建其他表:
|生物|物品背包|装备|id|
这对我来说很好。但问题是,Backback_id和EquipItems_id中的ItemsInNullable都设置为false。这会导致以下异常:
Caused by: java.sql.SQLException: Field 'itemsInBackpack_id' doesn't have a default value
如何告诉Hibernate允许这些列上有空值
编辑:
我就是这样保存它的:
Item item1 = new Item();
Item item2 = new Item();
creature.getEquippedItems().add(item1);
creature.getItemsInBackpack().add(item2);
repository.save(creature);
编辑
项目类别:
@Entity
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
public long getId() {
return id;
}
}
我想要实现的是:物品只能装在背包里或装备齐全。不是两者都有
# 1 楼答案
您可能需要创建两个单独的映射表。您可以使用^{} annotation 控制您的表。因此,请将
Creature
的代码修改为这将创建两个单独的表,因此不必担心列为null。更好的方法可能是有一个“装备项目”的旗子表,比如:
然后,你的生物不需要两个
Item
列表,你只需要一个EquippableItem
列表