2

以为我会尝试 Spring Roo,所以今天我遇到了很多有趣的新问题。希望你们能帮助我最新的一个。Roo 能够为您的实体生成集成测试,但其中大多数对我来说都失败了。最常见的失败是某种形式的约束违规,例如将 null 插入到非 null 字段中。我意识到我的实体上没有任何东西反映数据库中的这些约束。

例如,Property Entity 与 Term 具有多对一的关系

//bi-directional many-to-one association to Term
    @ManyToOne
@JoinColumn(name="TERM_ID",)
private Term term;

将其更改为:

//bi-directional many-to-one association to Term
@ManyToOne(optional=false)
@JoinColumn(name="TERM_ID", nullable=false)
private Term term;

仍然会导致测试失败,因此不确定 Roo 是否足够聪明以自动创建 Term 实体。

所以我的问题是我是否可以修改这些生成的测试而无需 Roo 在重新启动时覆盖它们?或者 Roo 应该能够设置非空值吗?

关于集成测试以及您可以在任何地方使用生成的类做什么的文档确实不多。我至少可以找到:)

谢谢

4

1 回答 1

1

我自己偶然发现了这个问题。虽然这个问题已经两年了,但我希望问题起始者现在也找到了解决方案。希望我的回答对其他人有所帮助。

显然 Roo 使用来自 JSR 303 的验证而不是 JPA 约束来生成正确的集成测试。

JPA 对数据库施加约束,但对应用程序逻辑没有约束。要让 Roo 生成正确的集成测试,您还必须指定与应用程序逻辑相同的约束。为了两者兼得,只需使用 JPA 和 JSR 303 中的注释。

...
import javax.validation.constraints.NotNull;
....

@ManyToOne(optional=false)
@JoinColumn(name="TERM_ID", nullable=false)
@NotNull
private Term term;
于 2012-10-12T09:00:53.760 回答