0
方案:我在我的postgres數據庫中有兩個名爲Document和Element的表。它們之間的關係是一對多的(一個文檔有很多元素)。所以元素表有一個文檔ID的外鍵。現在我需要從每個文檔ID的初始值開始爲元素ID創建一個序列。JPA - 爲每個外鍵生成一個序列標識(非唯一)並創建一個複合鍵
例如:
e_id | d_id
------------
1 | x
2 | x
3 | x
1 | y
2 | y
3 | y
一旦我有這樣,有元件和另一臺之間的一個新的水平關係的所謂的標記元件,其具有複合關鍵字(DOCUMENT_ID,element_id)和labeler_id的複合密鑰。
問題:
如何生成序列從每個文檔ID的初始值開始?
如何在標籤表中顯示組合鍵的JPA映射。具體哪個字段我也映射文檔ID?
以下是爲您提供方便(在斯卡拉)型號:
元
@Embeddable
class CompositeKey extends Serializable {
@BeanProperty
@Column(name = "id", nullable = false)
var id : Long = _
@BeanProperty
@Column(name = "document_id", nullable = false)
var documentId : UUID = _
def this(id: Long, documentId: UUID) = {
this()
this.id = id
this.documentId = documentId
}
}
@Entity
@DynamicUpdate
@Table(name = "element")
class Element {
@EmbeddedId
@BeanProperty
@GeneratedValue(strategy = GenerationType.SEQUENCE)
var id: CompositeKey = _
@MapsId("documentId")
@BeanProperty
@JoinColumn(name = "document_id", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
var document: Document = _
LabeledElement
@Embeddable
class LabeledElementKey extends Serializable {
@BeanProperty
@Column(name = "document_id", nullable = false)
var documentId : UUID = _
@BeanProperty
@Column(name = "labeler_id", nullable = false)
var labelerId : Long = _
@BeanProperty
@Column(name = "element_id", nullable = false)
var elementId : Long = _
def this(documentId : UUID, labelerId : Long, elementId : Long) = {
this()
this.documentId = documentId
this.labelerId = labelerId
this.elementId = elementId
}
}
@Entity
@Table(name = "labeled_element")
class LabeledElement {
@EmbeddedId
@BeanProperty
@Column(unique = true)
var id : LabeledElementKey = _
@MapsId("labelerId")
@JoinColumn(name = "labeler_id", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
var labeler: Labeler = _
@MapsId("elementId")
@JoinColumns(Array(
new JoinColumn (name = "element_id", referencedColumnName = "id"),
new JoinColumn (name = "document_id", referencedColumnName = "document_id")
))
@ManyToOne(fetch = FetchType.LAZY)
var element: Element = _
// goes on
用的方式是正確的,現在,我得到的以下錯誤:
org.hibernate.AnnotationException: No identifier specified for entity: model.Element
您的努力將不勝感激。謝謝!
我確實經常犯這些愚蠢的錯誤。我改變了它,但似乎沒有改變任何東西 – jagan120
同樣的例外? – fhossfel