無題1

1.當hibernate持久化一個[color=red]臨時對象[/color]時,在默認情況下,它不會自動持久化所關聯的其它[color=red]臨時對象[/color]。如果希望希望當hibernate持久化一個臨時對象時自動持久化所關聯的對象,可以在配置文件中將該對象所要關聯持久化的那個對象的cascade屬性設爲'save-update',cascade屬性的默認值爲‘none’。
[color=red]caseCade的屬性爲save-update表示保存或者更新當前對象時,會級聯保存或更新與它相關聯的對象[/color]

2.inverse屬性用來決定由哪端來維護關係
例如:

public class Customer implements java.io.Serializable {
private Integer id;
private String name;
private Set orders=new HashSet();
//get/set.......
}
public class Order implements java.io.Serializable {
private Integer id;
private Customer customer;
private String orderNumber;
//get/set.......
}

public void associateCustomerAndOrder(){
//getSession1()........
Customer customer=new Customer("jack");
Order order=new Order();
order.setOrderNumber("jack_order001") ;
session1.save(customer);
session1.save(order);
int idofJack=customer.getId();
int idofjackOrder=order.getId();
//closeSession()1......

//getSession2()........
Customer customer=(Customer)session2.load(Customer.class,idofJack);
Order order=(Order)session2.load(Order.class,idofjackOrder);
order.setCustomer(customer); //1
customer.getOrders().add(order); //2
//closeSession()2......

}


<1.當customer配置文件中的set標籤裏面的屬性inverse=false時,執行上面的代碼將會出現兩條用來更新customer與order關係的update語句
<2.當customer配置文件中的set標籤裏面的屬性inverse=true時,註釋掉1處的代碼,再執行上面的代碼將會出現一條用來更新customer與order關係的update語句
<3.當customer配置文件中的set標籤裏面的屬性inverse=true時,註釋掉2處的代碼,再執行上面的代碼將不會出現用來更新customer與order關係的update語句
[color=red]由此可以證明inverse用來決定由哪段來維護雙方關係[/color]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章