以下代码采用 Kotlin 语言。
我有一个 TestExecutionSummary
实体
@Entity
class TestExecutionSummary : Serializable {
@EmbeddedId
lateinit var id: TestExecutionId
...
@OneToMany(cascade = [CascadeType.ALL], mappedBy = "testExecutionSummary")
var failures: List<TestFailure> = mutableListOf()
}
@Embeddable
data class TestExecutionId(
var stepExecutionId: Long,
var jobExecutionId: Long
) : Serializable
和一个 TestFailure
实体
@Entity
class TestFailure : Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
var id: Long? = null
@Column(length = 999)
lateinit var testId: String
@JoinColumns(
JoinColumn(name = "stepExecutionId", referencedColumnName = "stepExecutionId"),
JoinColumn(name = "jobExecutionId", referencedColumnName = "jobExecutionId")
)
@ManyToOne
lateinit var testExecutionSummary: TestExecutionSummary
@Column(length = 999)
var message: String? = null
}
这工作得很好,但让我烦恼的是 TestFailure
没有独立存在,并且在我看来并不真正有资格作为一个实体。是否可以在不使 TestFailure
成为实体的情况下维持显示的关系?
最佳答案
JPA 2.0 有 ElementCollection这正是我正在寻找的。p>
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(
name = "TEST_FAILURE",
joinColumns = [
JoinColumn(name = "stepExecutionId", referencedColumnName = "stepExecutionId"),
JoinColumn(name = "jobExecutionId", referencedColumnName = "jobExecutionId")
]
)
var failures: List<TestFailure> = mutableListOf()
@Embeddable
class TestFailure : Serializable {
@Column(length = 999)
lateinit var testId: String
@Column(length = 999)
var message: String? = null
}
关于java - JPA:关系的目标有可能是非实体吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49481383/