JPA 使用 EntityManager.remove() 删除实体

通过 id 显示 JPA 删除实体的 Java 程序。

@ContextConfiguration(locations = "classpath:application-context-test.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class TestRemoveEntity {

	@PersistenceContext
    private EntityManager manager;

	private static Integer departmentId;

	@Before
	public void setupData() 
	{
		DepartmentEntity department = new DepartmentEntity("Information Technology");
		manager.persist(department);
		departmentId = department.getId();
	}

	@Test
	@Transactional
	@Rollback(true)
	public void testRemoveDepartment()
	{
		//Find managed Entity reference
		DepartmentEntity department = manager.find(DepartmentEntity.class, departmentId);

		//Call remove method to remove the entity
		if(department != null){
			manager.remove(department);
		}

		List<DepartmentEntity> departments = manager.createQuery("Select a From DepartmentEntity a", 
		DepartmentEntity.class).getResultList();

		Assert.assertEquals(0, departments.size());
	}
}

在这个例子中,我们首先使用 find()调用查找实体,它返回 DepartmentEntity的托管实例,然后使用实体管理器上的 remove()调用删除实体。

此方法将确保具有给定 id 的部门(如果 id 不为空)从数据库中删除。
无论部门是否存在,都会成功返回。

JPA如何删除实体

在 JPA 中,要删除实体,实体本身必须受到管理,这意味着它存在于持久性上下文中。

这意味着调用应用程序应该已经加载或者访问了实体,现在正在发出删除它的命令。

这通常不是问题,因为大多数情况下,应用程序会将其作为确定这是它要删除的对象的过程的一部分进行管理。

之路教程 https://onitr oad .com

JPA 使用 JPQL Query 删除多个实体

删除实体的另一种方法是以以下方式使用 JPQL(Java 持久性查询语言)。
它可以帮助使用单个语句删除多行。

//Delete entity using JP QL
Query query = manager.createNativeQuery("DELETE FROM DEPARTMENT WHERE ID = " + departmentId);
query.executeUpdate();

实际上,通过这种方式,我们可以在单个查询中删除多行,这是使用 EntityManager.remove() 方法无法实现的。

//Delete all rows in single query
Query query = manager.createNativeQuery("DELETE FROM DEPARTMENT");
query.executeUpdate();
日期:2020-09-17 00:09:51 来源:oir作者:oir