Поле Spring Roo @Id не заполнено в тесте DataOnDemand - PullRequest
1 голос
/ 02 декабря 2010

Я работаю с веб-приложением, созданным на основе Spring Roo 1.0.2.Я определил объект, который имеет столбец первичного ключа PERSONID, а также несколько других полей.

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

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

...

Интеграционные тесты, управляемые Roo, содержат функцию, которая создает экземпляр фиктивного объекта и заполняет каждый из не-Idfields.

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

    //set other non-Id fields

    return obj;
}

Эта функция вызывается из интеграционных тестов и впоследствии завершается ошибкой, поскольку таблица базы данных имеет ненулевое ограничение для столбца PERSONID.Я попытался явно установить аннотацию @NotNull для столбца personId, но это не имеет никакого эффекта.Я подозреваю, что это как-то связано с тем фактом, что PERSONID является неавтоматизированным первичным ключом.

Я знаю, что могу решить эту проблему, переопределив интеграционные тесты и заполнив сам Id, но я бы хотел этого избежатьесли возможно.Кто-нибудь знает, как я могу автоматически заполнить это поле в управляемых объектах DataOnDemand?

1 Ответ

0 голосов
/ 02 декабря 2010

Spring Roo создает собственное поле идентификатора в аспекте _entity.aj.Таким образом, в базовом классе не требуется никаких дополнительных полей, помеченных @ID.Поле управляемого идентификатора Roo должно быть заполнено объектом DataOnDemand от Roo.

Столбец базы данных для управляемого идентификатора ROO по умолчанию равен "id".Если вам нужно другое имя столбца (например, для соответствия схеме базы данных), тогда столбец можно указать с помощью @RooEntity.identifierColumn.

...