【发布时间】:2018-03-25 21:57:29
【问题描述】:
以下代码在 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 没有独立存在,并且不真正符合 IMO 实体的资格。是否可以在不使TestFailure 成为实体的情况下保持显示的关系?
【问题讨论】:
-
IMO 关系应该被非规范化。但是为什么你需要一个列表?一个标志(如果需要,+列)是否足以表明测试失败?
-
@MontassarElBéhi 我不关注。如果一次测试执行导致多次失败。你将如何用“一个标志(如果需要的话+列)”来坚持这一点?
-
就个人而言,我发现将关系视为一个实体通常非常有用。还经常发生的是,您稍后会找到要添加到此关系/实体的其他属性。我说只是接受这个想法......
-
@AbhijitSarkar 抱歉,但是当我看到一个没有按时间顺序排列的状态(通常是日期)的实体时,我更愿意保留主实体上的最后一个状态:失败 [1/0]。所以也许这很有意义,问题是忘记将摘要作为一个实体(将 Id 列整合,但不整合为失败实体中的 Id)。总结以后可以简单的pojo。你觉得呢?
-
@MontassarElBéhi 我还是不明白你在说什么。随时提供带有实际代码的要点。同时,我找到了一个令我满意的解决方案。
标签: java spring jpa spring-data-jpa jpa-2.0