情況:我有一個masterDB和一個library1DB和library2DB。hibernate - 如何JoinColumn一個EmbeddedId
library1DB和library2DB是兩個獨立的數據庫,但具有相同的模式,因爲每個庫都必須有自己的數據庫。現在我們有一個masterDB,它是所有庫(library1DB和library2DB)中所有數據的聚合版本,仍然記下它們各自的ID並將它們映射到它們的庫ID。
這是我希望我的表被結構化: 書 - book_id - library_id - 標題 - shelf_id 貨架 - shelf_id - library_id - book_id - 描述
我有這些模型:
@Entity
public class Book {
@EmbeddedId
private BookKey bookKey;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "SHELF_ID", referencedColumnName = "SHELF_ID"),
@JoinColumn(name = "LIBRARY_ID", referencedColumnName = "LIBRARY_ID")
})
private ObjectA objectA;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "ANOTHER_ID", referencedColumnName = "ANOTHER_ID"),
@JoinColumn(name = "LIBRARY_ID", referencedColumnName = "LIBRARY_ID")
})
private ObjectB objectB;
@Column
private String title;
}
@Embeddable
public class BookKey implements Serializable {
@Column(name = "BOOK_ID")
private long bookId;
@Column(name = "LIBRARY_ID")
private long libraryId;
}
但我得到這個例外:
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: Book column: library_id (should be mapped with insert="false" update="false")
我一直在使用@IdClass代替@Embeddable和@EmbeddedId嘗試過了,我得到這個:
Caused by: org.hibernate.DuplicateMappingException: Table [book] contains physical column name [libraryId] represented by different logical column names: [libraryId], [LIBRARY_ID]
任何幫助嗎?
謝謝!
它工作的時候我只有對象A,它的工作原理。但是當我有ObjectB時,我又遇到了同樣的異常。 – lorraine 2014-10-29 10:26:37
您已經將「library_id」列映射到對象「BookKey」中。因此,您應該爲映射同一列的所有其他位置添加「insertable = false,updatable = false」。 – Alex 2014-10-29 12:47:20