Ich arbeite mit einer Web-Anwendung auf Spring Roo 1.0.2 gebaut. Ich habe eine Entität definiert, die eine PERSONID-Spalte für den Primärschlüssel sowie mehrere andere Felder enthält.Spring Roo @Id Feld in DataOnDemand Test nicht gefüllt
@Id
@Column(name = "PERSONID", precision = 10, scale = 0)
private Long personId;
@Size(max = 50)
@Column(name = "NAME")
@NotNull
private String name;
...
Die von Roo verwalteten Integrationstests enthalten eine Funktion, die ein Mock-Objekt instanziiert und jedes Nicht-Id-Feld ausfüllt.
public Person PersonDataOnDemand.getNewTransientPerson(int index) {
Person obj = new Person();
obj.setName("name_" + index);
//set other non-Id fields
return obj;
}
Diese Funktion wird von Integrationstests genannt und nicht später als die Datenbanktabelle eine nicht null Einschränkung für die Spalte PERSONID hat. Ich habe versucht, die Annotation @NotNull explizit auf die personId-Spalte zu setzen, aber es hat keine Auswirkungen. Ich vermute, das hat etwas damit zu tun, dass PERSONID ein nicht automatisch generierter Primärschlüssel ist.
Ich weiß, dass ich dies angehen kann, indem ich die Integrationstests überschreibe und die Id selbst bevölkere, aber ich möchte das, wenn möglich, vermeiden. Kennt jemand einen Weg, wie ich dieses Feld automatisch in die verwalteten DataOnDemand-Objekte eintragen kann?
Im "normalen" Fall Spring Roo erstellt seine eigenen ID-Felder in einem seiner Aspekte (ich glaube in xx_entity.aj) - Haben Sie das roo gemanagte ID-Feld deaktiviert? - Und würde es funktionieren, wenn Sie die Roo Managed ID verwenden? – Ralph
@Ralph - danke, du warst richtig. Sobald ich die @Id-Annotation entfernt habe, erhielt der Aspekt _entity.aj ein neues verwaltetes @Id-Feld und getNewTransientPerson das Feld PersonId. Leider habe ich in meinem Fall keine Kontrolle über das DB-Schema, daher kann ich keinen verwalteten Primärschlüssel verwenden :(. Es sieht so aus, als müsste ich die Tests überschreiben und das PersonId-Feld manuell füllen. – DrewCo
Sie könnten versuchen, dies zu tun RooEntity.identifierColumn - ich habe dieses Feld vorher noch nie benutzt - aber ich nehme an, dass Sie das brauchen – Ralph