一個好的方法如下所示
如果需要調用一個getter方法,然後使用get方法。 get方法命中數據庫。
public class AccountServiceImpl implements AccountService {
private SessionFactory sessionFactory;
public BigDecimal getBalance(Integer acountId) {
// You need to know your balance
// So you need to use get method to access the database
Account account = (Account) sessionFactory.getCurrentSession().get(Account.class, accountId);
return account.getBalance();
}
}
如果需要調用getter和setter方法,使用get方法。
針對ChssPly的評論:
JPA與Hibernate書上說,有關負載方法
的load()方法總是試圖返回一個代理,只返回如果初始化的對象實例它已經由當前的持久性上下文管理。
而且
它擊中的數據庫,只要你嘗試訪問返回的佔位符,並迫使其初始化
因此,他是對的,當你建立一個單一的屬性。
但在JPA與Hibernate本書中的以下情形
這是常見的,以獲得持久化實例將其指定爲另一個實例的引用。例如,假設您只需要該項目僅用於一個目的:使用註釋設置關聯:aComment.setForAuction(item)。
如果這是你打算處理的項目,代理服務器將會正常工作;沒有必要去打數據庫 。換句話說,保存註釋時,您需要插入到COMMENT表中的項目的外鍵值。
一個Item的代理只提供:一個標識符值包裝在一個佔位符中,看起來像真實的東西。
問候,
他們,複製 - http://stackoverflow.com/questions/608947/hibernate-difference-between-session-get-and-session-load – Bozho 2009-12-23 18:04:00