2
我正在構建一個帶有一點JPA的小eclipse rcp。現在發生了一些奇怪的事情:JPA,Eclipselink - 關係在新交易中被刪除
我用一些SubCategories創建了一些TopCategories,它按預期工作。插入件被打印在日誌中。我閉上我的應用程序和現在的問題提出了起來:
的分類有關係的書
Book.java
@Entity
public class Book implements Serializable, PropertyChangeListener {
private static final long serialVersionUID = 4646743297687986216L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private boolean active = true;
@Temporal(TemporalType.TIMESTAMP)
private Date updated;
@Lob
private Set<Group> allowedGroups;
@Column(columnDefinition = "TEXT")
private String text;
private BookType type;
@ManyToOne
private TopCategory topCategory;
@ManyToOne
private SubCategory subCategory;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private BookAttachment attachment;
@Transient
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
// ordinary getter/setter
@PrePersist
@PreUpdate
private void updateUpdated() {
this.updated = new Date();
}
}
重啓和查詢預訂,這select b from Book
之後,是不是所有的子類別使用被刪除。如果一個子類與Book有關係,它會保留在我的數據庫中。爲什麼發生這種情況?
Category.java
@MappedSuperclass
public class Category implements Serializable {
private static final long serialVersionUID = 6091963773161164543L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
@Temporal(TemporalType.TIMESTAMP)
private Date updated;
@Enumerated(EnumType.STRING)
private CategoryType type;
@Transient
private List<Snippet> snippets = new LinkedList<Snippet>();
// ordinary getter/setter
@PrePersist
@PreUpdate
public void updateUpdated() {
this.updated = new Date();
}
}
TopCategory.java
@Entity
public class TopCategory extends Category {
@OneToMany(cascade = CascadeType.ALL)
private List<SubCategory> subCategories;
public TopCategory() {
setName("");
setSubCategories(new ArrayList<SubCategory>());
}
public List<SubCategory> getSubCategories() {
return subCategories;
}
public void setSubCategories(List<SubCategory> subCategories) {
this.subCategories = subCategories;
}
@Override
public void setType(CategoryType type) {
super.setType(CategoryType.topCategory);
}
SubCategory.java
@Entity
public class SubCategory extends Category {
@ManyToOne(cascade = CascadeType.ALL)
private TopCategory topCategory;
public TopCategory getTopCategory() {
return topCategory;
}
public void setTopCategory(TopCategory topCategory) {
this.topCategory = topCategory;
}
@Override
public void setType(CategoryType type) {
super.setType(CategoryType.subCategory);
}
}
我使用的EclipseLink 2.1.1。
問候
好的 - 我發現了這個問題:我的模型中的一個結果列表是從contentprovider修改的 - 這不是使用SubCategories被刪除,如果實體對象沒有分離,它會導致entitymanger更新。 – onigunn 2010-12-16 18:03:32