不遞增根據JPA 2.0規範:@Version在關係變化
版本屬性是由持久性提供運行時 當對象被寫入到數據庫更新。所有非關係 字段和屬性和所有關係擁有的由實體包含在版本檢查中的 。
這似乎並不在我的情況下工作。我有兩個實體:
@Entity
public class OrderedItem {
@Id
@GeneratedValue
private int id;
private String name;
@ManyToOne
private Customer owner;
@Version
private int version;
public OrderedItem(String name) {
this.name = name;
}
// default constructor + bunch of simple accessors and mutators
}
@Entity
public class Customer {
@Id
@GeneratedValue
private int id;
private String name;
@OneToMany(mappedBy = "owner")
private Set<OrderedItem> orderedItems = new HashSet<OrderedItem>();;
@Version
private int version;
public Customer(String name) {
this.name = name;
}
// default constructor + bunch of simple accessors and mutators
}
的「多」的ManyToOne
關係方必須是持有端,所以在我的情況下OrderedItem
是擁有方。遵循JPA 2.0規範,我認爲當我更改從OrderedItem
訪問的Customer
對象時,應該增加OrderedItem
實體的版本。因此,我試圖對它進行測試:
Customer john = new Customer("John");
OrderedItem milk = new OrderedItem("Milk");
milk.setOwner(john);
john.getOrderedItems().add(milk);
startTx();
em.persist(john);
em.persist(milk);
stopTx();
startTx();
OrderedItem milkFromPC = em.find(OrderedItem.class, milk.getId());
milkFromPC.getOwner().setName("Michael");
stopTx();
的版本號是OrderedItem
(所以沒有增量)和爲Customer
。
任何想法爲什麼?
它只是碰到了我的頭,而寫了這個問題 - 是有可能,在JPA 2.0規範中的「關係」這個詞意味着只有如果我改變實體 - Customer
- 本身( 不是其狀態)版本會增加?就像@JoinColumn(updatable=false)
的情況一樣?
你是對的普塞。我猜JPA無法區分對'Customer'類本身所做的更改或通過OrderedItem訪問,以便允許它。謝謝! –