0
我使用EclipseLink作爲我的持久單元。我在刪除實體時遇到問題。下面的例子:一個設備有一個類型。有很多設備可能具有相同的類型。 我插入了一個視圖類型和設備(這是指一個類型)。如果我現在刪除一個類型(一個設備引用的),那麼該實體將從數據庫中刪除。這不應該發生,因爲設備引用了該類型。 我做錯了什麼?EclipseLink刪除引用實體
在此先感謝!
我刪除類似如下:
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Query q = em.createQuery("SELECT d FROM DeviceType d WHERE d.name = :name");
q.setParameter("name", "Name");
Type type = (Type)q.getSingleResult();
em.remove(type);
em.getTransaction().commit();
em.close();
我的實體:
@Entity
public class Device {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne
@JoinColumn(name="TYPE_ID", nullable = false)
private Type type;
}
@Entity
public class Type {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false)
private String name;
}
是的,我期待着一個例外。創建表如下所示:CREATE TABLE DEVICE(ID BIGINT AUTO_INCREMENT NOT NULL,YPE_ID BIGINT NOT NULL,PRIMARY KEY(ID)) ALTER TABLE DEVICE ADD CONSTRAINT FK_DEVICE_TYPE_ID FOREIGN KEY(TYPE_ID)引用類型(ID) CREATE TABLE TYPE(ID BIGINT AUTO_INCREMENT NOT NULL,NAME VARCHAR(255)NOT NULL UNIQUE,PRIMARY KEY(ID))'也許我的註釋是錯誤的? – Stefan 2011-05-27 20:16:26
看來,MySQL不保存MyISAM中的約束。所以,也許換成InnoDB可以解決我的問題。 – Stefan 2011-05-27 20:47:30
將引擎設置爲InnoDB解決了這個問題。現在我得到了例外。通過屬性「eclipselink.ddl.default-table-suffix」或「eclipselink.ddl-generation.table-creation-suffix」配置引擎的唯一問題不適用於我。需要在'my.cnf'中設置默認引擎。 – Stefan 2011-05-28 08:00:48