我有一桌孩子,每个孩子都有一套不同的玩具。有一个表格存储每个可用玩具的代码。
@Entity
public class Child implements Serializable {
@Id
@GeneratedValue
private int id;
@OneToMany( mappedBy = "child", fetch = FetchType.EAGER, cascade = CascadeType.PERSIST )
private Set<Toy> toys = new HashSet<>();
// getters & setters
}
@Entity
public class ToyCode implements Serializable {
@Id
private int id;
// getters & setters
}
@Entity
public class Toy implements Serializable {
@EmbeddedId
private ToyPK id = new ToyPK();
@MapsId( "childId" )
@ManyToOne
private Child child;
@MapsId( "toyId" )
@ManyToOne // <-- there is no cascade=CascadeType.PERSIST
private ToyCode toyCode;
// getters & setters
}
虽然 Toy 类的 toyCode 成员具有非级联属性,但 Hibernate 仍然存在。
Child elena = new Child();
Toy barbie = new Toy();
barbie.setChild( elena );
barbie.getId().setChildId( elena.getId() );
barbie.getId().setToyId( 4218 );
barbie.setToyCode( new ToyCode( 4218 ) );
elena.addToy( barbie );
em.persist(elena);
我在 ToyCode 表中没有 4218 记录,但 Hibernate 创建了它。
我错了吗?这是正确的行为还是我应该提交错误?如果正确,我该如何防止 Hibernate 保存新的玩具代码?