Hibernate:JPA的多对多操作

实体类User.java

@Entity
@Table(name = "user")
public class User {

	@Id
	@Column(name = "user_id")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer userId;
	@Column(name = "user_name")
	private String userName;
	@ManyToMany(mappedBy = "user", cascade = CascadeType.ALL)
	private Set<Role> role = new HashSet<>(0);

实体类Role.java

@Entity
@Table(name = "role")
public class Role {

	@Id
	@Column(name = "role_id")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer roleId;
	@Column(name = "role_name")
	private String roleName;
	@ManyToMany(cascade = CascadeType.ALL)
	@JoinTable(name = "user_role", joinColumns = { @JoinColumn(name = "role_id", referencedColumnName = "role_id") }, // 写的是当前实体在中间表的外键字段
			inverseJoinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "user_id") }) // 写的是对方实体在中间表的外键字段
	private Set<User> user = new HashSet<>(0);

级联保存

public void save() {
	User user1 = new User();
	User user2 = new User();
	user1.setUserName("用户一");
	user2.setUserName("用户二");

	Role role1 = new Role();
	Role role2 = new Role();
	Role role3 = new Role();
	role1.setRoleName("角色一");
	role2.setRoleName("角色二");
	role3.setRoleName("角色三");

	user1.getRole().add(role1);
	user1.getRole().add(role2);
	user2.getRole().add(role2);
	user2.getRole().add(role3);

	role1.getUser().add(user1);
	role2.getUser().add(user1);
	role2.getUser().add(user2);
	role3.getUser().add(user2);

	EntityManager entityManager = JPAUtils.createEntityManager();
	EntityTransaction entityTransaction = entityManager.getTransaction();
	entityTransaction.begin();
	entityManager.persist(role1);
	entityManager.persist(role2);
	entityManager.persist(role3);
	entityTransaction.commit();
	entityManager.close();
}

级联删除:双向级联删除,多对多中不能配置,会删除所有表中数据

public void delete() {
	EntityManager entityManager = JPAUtils.createEntityManager();
	EntityTransaction entityTransaction = entityManager.getTransaction();
	entityTransaction.begin();
	Role role = entityManager.find(Role.class, 1);
	entityManager.remove(role);
	entityTransaction.commit();
	entityManager.close();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值