天天看點

JPA----EntityManager的核心方法----07

EntityManager :在 JPA 規範中, EntityManager 是完成持久化操作的核心對象。實體作為普通 Java 對象,隻有在調用

                            EntityManager 将其持久化後才會變成持久化對象。EntityManager 對象在一組實體類與底層資料源

                             之間進行 O/R 映射的管理。它可以用來管理和更新 Entity Bean, 根椐主鍵查找 Entity Bean, 還可以

                           通過JPQL語句查詢實體。

1. find (Class<T> entityClass,Object primaryKey):傳回指定的 OID 對應的實體類對象,如果這個實體存在于目前

                       的持久化環境,則傳回一個被緩存的對象;否則會建立一個新的 Entity, 并加載資料庫中相關資訊;若 OID

                       不存在于資料庫中,則傳回一個 null。第一個參數為被查詢的實體類類型,第二個參數為待查找實體的主鍵值。

//類似于hibernate的session的get方法
@Test
public void testFind() {
	Customer customer = entityManager.find(Customer.class, 87);
	System.out.println(customer);
}
           

2.getReference (Class<T> entityClass,Object primaryKey):與find()方法類似,不同的是:如果緩存中不存在指定的

                            Entity, EntityManager 會建立一個 Entity 類的代理,但是不會立即加載資料庫中的資訊,隻有第一次真

                            正使用此 Entity 的屬性才加載,是以如果此 OID 在資料庫不存在,getReference() 不會傳回 null 值,

                             而是抛出EntityNotFoundException

//類似于hibernate的session的load方法。
@Test
public void testReference() {
	Customer customer = entityManager.getReference(Customer.class, 87);
	System.out.println(customer);
}
           

3.persist (Object entity):用于将新建立的 Entity 納入到 EntityManager 的管理。

                                             該方法執行後,傳入 persist() 方法的 Entity 對象轉換成持久化狀态。

// 類似于hibernate的savea方法使對象由臨時狀态,變為持久化狀态。
// 和hibernate不同的時,若對象由id,則不能執行insert操作。
@Test
public void testPersist() {
	Customer customer = new Customer();
	customer.setAge(15);
	customer.setBrith(new Date());
	customer.setCreatTime(new Date());
	customer.setEmail("[email protected]");
	// customer.setId(1);
	customer.setLastName("sddd");

	entityManager.persist(customer);
	System.out.println(customer.getId());
}
           

4.remove (Object entity):删除執行個體。

// 類似于hibernate的session的delete方法。把對象從資料庫中移除,
// 隻能移除持久化對象,不可以移除遊離化對象。
@Test
public void testRemove() {
	Customer customer = entityManager.find(Customer.class, 87);
	entityManager.remove(customer);

}
           

繼續閱讀