我有一個非常奇怪的問題,目前休眠。 不知何故在一張桌子上,它創建一個引用自身的外鍵。該列也是主鍵。這基本上阻止我從該表中刪除任何行。休眠創建自己的外鍵
在日誌中我可以看到一行:
DEBUG org.hibernate.SQL - 改變表設備添加索引 FK79D00A76C682495E(ID),加約束FK79D00A76C682495E外鍵 (ID)的參考設備(ID )
其他類似的表似乎很好。這對於MySQL和Derby來說似乎都是如此。我正在使用休眠4.1.4
註釋的類如下所示。
@Entity(name = "Device")
public class Device extends DomainObject implements Searchable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected long id;
@Column(name = "Type")
@Enumerated(EnumType.STRING)
private DeviceTypeEnum type = DeviceTypeEnum.AccessControlDevice;
@Column(name = "Name", length = Constance.DATABASE_NAME_FIELD_LENGTH)
private String name;
@Column(name = "Description", length = Constance.DATABASE_DESCRIPTION_FIELD_LENGTH)
private String description;
@Column(name = "Identifier", length = Constance.DATABASE_IDENTIFIER_FIELD_LENGTH, unique = true)
private String identifier;
@ManyToMany
@JoinTable(name = "Device2Group", joinColumns = {@JoinColumn(name = "DeviceID")}, inverseJoinColumns = {@JoinColumn(name = "DeviceGroupID")})
private List<DeviceGroup> groups = new ArrayList<DeviceGroup>();
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "location")
private Location location;
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "Address")
private Address address;
@ManyToOne
@JoinColumn(name = "Link", nullable = false)
private Link link;
}
日誌是在hibernate導出方案時生成的。我試圖先刪除數據庫,但仍然是相同的。 – Wudong 2013-04-07 06:41:43
ü是正確的,它已被修改,它確實有一個自我引用在一列(樹狀結構),我丟棄了。但我不確定它爲什麼會發生,現在即使在添加列後,限制仍然存在。 – Wudong 2013-04-07 06:45:02
@Wudong當你刪除表(首先需要爲空)時,hibernate在你的模式中找不到它。所以它在服務器啓動時創建表。完成這些步驟後,您的表格不能有自己的外鍵。我在問1)你丟了桌子嗎? 2)Hibernate是否再次創建它? 3)它是否被正確創建? – 2013-04-07 09:59:38