(1)单向一对多配置
多方配置:
@Entity@Table(name=“t_product”)
public class Product {
@Id
@GeneratedValue
private Long id;
private String name;
}
一方配置
@Entity
@Table(name="t_productDir")
public class ProductDir {
@Id
@GeneratedValue
private Long id;
private String name;
//泛型必须添加进去
@OneToMany
@JoinColumn(name="dir_id")
private Set<Product> products = new HashSet<>();
}
注: 集合申明的时候,使用接口
(2)双向一对多
配置:让多方来维护的关系,一方放弃管理mappedBy
@OneToMany(mappedBy = "dir")
private List<Product> products = new ArrayList<>();
双向一对多配置 级联保存 级联删除(配置) 孤儿删除
级联:就是我操作一方数据,就同时可以多方的数据也一并操作
级联分为:级联保存
@OneToMany(cascade = CascadeType.PRESIST)
级联删除
@OneToMany(cascade = CascadeType.REMOVE)
孤儿删除
让一方解除关系 ,才能从1方删除多方
@OneToMany(cascade = CascadeType.REMOVE,mappedBy = “dir”,orphanRemoval = true)
单向和双向 多对多
@Entity
@Table(name="t_user")
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToMany
@JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="user_id")},
inverseJoinColumns ={@JoinColumn(name="role_id")} )
private Set<Role> roles = new HashSet<>();
}
@Entity
@Table(name="t_role")
public class Role {
@Id @GeneratedValue
private Long id;
private String name;
}
单向对多对保存数据
保存代码
User user1 = new User();
user1.setName("渣渣辉");
User user2 = new User();
user2.setName("光头强");
User user3 = new User();
user3.setName("王天霸");
Role role1 = new Role();
role1.setName("演员");
Role role2 = new Role();
role2.setName("导演");
//设置关系
user1.getRoles().add(role1);
user2.getRoles().add(role1);
user3.getRoles().add(role1);
user1.getRoles().add(role2);
user2.getRoles().add(role2);
//保存数据
EntityManager entityManager = JpaUtils.getEntityManager();
entityManager.getTransaction().begin();
entityManager.persist(user1);
entityManager.persist(user2);
entityManager.persist(user3);
entityManager.persist(role1);
entityManager.persist(role2);
entityManager.getTransaction().commit();
查询:如果要使用lazy加载 自己配置lazy就可以
双向多对多
配置
role
@ManyToMany(fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
@JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="role_id")},
inverseJoinColumns ={@JoinColumn(name="user_id")} )
private Set<User> users = new HashSet<>();
user
@ManyToMany(fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
@JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="user_id")},
inverseJoinColumns ={@JoinColumn(name="role_id")} )
private Set<Role> roles = new HashSet<>();
442

被折叠的 条评论
为什么被折叠?



