hibernate 多对一关联, 在多的一端维护关系, 不生成中间表
一的端配置@OneToMany,但是不设置cascade属性
@Entity @Table(name="dorms") public class Dorm { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 宿舍名称 @NotBlank private String name; // 住宿人数 @NotNull private Integer stayCount; // 床位 @OneToMany(fetch=FetchType.LAZY) //@JsonIgnore private List<Bed> beds; }
多的端配置
@Entity @Table(name="beds") public class Bed { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 床位 private String number; // 宿舍 @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @JoinColumn(name="dorm_id") private Dorm dorm; }
维护的时候, 仅仅保存bed信息, dorm自动被保存: Bed b0 = new Bed(); b0.setNumber("b-1"); b0.setDorm(dorm); Bed b1 = new Bed(); b1.setNumber("b-2"); b1.setDorm(dorm); List<Bed> list = Lists.newArrayList(b0, b1); bedDao.save(list); 后台log Hibernate: insert into dorms (name, stay_count) values (?, ?) Hibernate: insert into beds (dorm_id, number) values (?, ?) Hibernate: insert into beds (dorm_id, number) values (?, ?)