Java 未在DataOnDemand测试中填充Spring Roo@Id字段

Java 未在DataOnDemand测试中填充Spring Roo@Id字段,java,unit-testing,spring,spring-roo,Java,Unit Testing,Spring,Spring Roo,我正在使用一个基于SpringRoo1.0.2构建的web应用程序。我定义了一个实体,它有一个主键PERSONID列和几个其他字段 @Id @Column(name = "PERSONID", precision = 10, scale = 0) private Long personId; @Size(max = 50) @Column(name = "NAME") @NotNull private String name; ... Roo托管集成测试包含一个实例化模拟对象并填充

我正在使用一个基于SpringRoo1.0.2构建的web应用程序。我定义了一个实体,它有一个主键PERSONID列和几个其他字段

@Id
@Column(name = "PERSONID", precision = 10, scale = 0)    
private Long personId;

@Size(max = 50)
@Column(name = "NAME")
@NotNull
private String name;

...
Roo托管集成测试包含一个实例化模拟对象并填充每个非Id字段的函数

public Person PersonDataOnDemand.getNewTransientPerson(int index) {
    Person obj = new Person();    
    obj.setName("name_" + index);

    //set other non-Id fields

    return obj;
}
此函数从集成测试中调用,随后由于数据库表在PERSONID列上具有NOTNULL约束而失败。我已经尝试在personId列上显式设置@NotNull注释,但没有效果。我怀疑这与PERSONID是非自动生成的主键这一事实有关


我知道我可以通过覆盖集成测试并自己填充Id来解决这个问题,但是如果可能的话,我希望避免这种情况。有人知道我可以如何在托管DataOnDemand对象中自动填充此字段吗

Spring Roo在其_entity.aj方面创建了自己的ID字段。因此,“基类”中不需要额外的标有@ID的字段。 Roo托管ID字段应该由Roo的DataOnDemand填充


roo托管id的数据库列默认为“id”。如果您需要其他列名称(例如,匹配数据库架构),则该列可以由
@rootentity.identifierColumn

在“正常”情况下,Spring Roo在其一个方面创建自己的ID字段(我相信在xx_entity.aj中)-您是否已取消激活Roo管理ID字段?--如果你使用roo管理的id会有效吗?@Ralph-谢谢,你是对的。我一删除@Id注释,_entity.aj方面就收到了一个新的托管@Id字段,getNewTransientPerson填充了PersonId字段。不幸的是,在我的情况下,我无法控制DB模式,因此无法使用托管主键:(.看起来我需要重写测试并手动填充PersonId字段。您可以尝试使用Roo方式,使用@roonentity.identifierColumn执行此操作--我以前从未使用过此字段-但我认为这正是您需要的。@Ralph-设置identifierColumn属性将@Id字段添加到映射的实体方面ped到我的PERSONID列,DataOnDemand方面正确填充了该字段。但是,实体方面中的PERSONID定义包含GenerationType.AUTO,当我需要用户提供时,会在数据库中自动生成一个值。我找到了,然后测试生成似乎是为顺序PKs设计的。谢谢对于您的帮助,如果您发布一个答案,我将很乐意接受。