我有兩個實體(稱爲EntityA和EntityB),其ID是一個隨機生成的UUID(因此該ID可以被認爲是全局唯一的)。 現在我想允許用戶爲A和B存儲額外的元數據(稱爲「標籤」),但在同一個表「TagValue」中。@OneToMany指向同一實體的不同類中
@Entity
@Table
public class EntityA {
@Id
private String uuid;
// Optional tags
@OneToMany
@JoinColumn(name="object_id", referencedColumnName="uuid")
private List<TagValue> tags = new LinkedList<TagValue>();
// other fields
}
EntityB與uuid和tags部分類似。
現在TagValue:
@Entity
@Table
public class TagValue {
@Id
private String id;
// Referenced object UUID
@Column(name="object_id")
private String objectId;
// Tag type
@ManyToOne
@JoinColumn(nullable=false)
private TagType type;
// Value
@Column(nullable=false)
private String value;
}
如果我使用模式生成的Hibernate,我收到以下錯誤EntityB:
10:47:00,912 ERROR [org.hibernate.tool.hbm2ddl.SchemaUpdate] (ServerService Thread Pool -- 58) HHH000388: Unsuccessful: alter table TagValue add constraint FK_ijg5p0jl85r50shhygdudcxh4 foreign key (object_id) references EntityA.
應該是這種映射方法通過JPA來支持?如果是這種情況,有沒有辦法避免TagValue/object_id上的約束生成?
在此先感謝!
您是否嘗試刪除數據庫? Hibernate中的模式自動生成具有非常非常有限的功能,對於一個真正的系統,您總是**需要手工製作ddl腳本。 – Augusto
刪除架構不起作用。但是,如果我在TagValue中具有通過objectId引用EntityA和EntityB的數據,則兩個表的約束創建將失敗。 – user1563703