2010-12-01 3 views
1

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

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

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

... 

РОО управляемые интеграционные тесты содержат функцию, которая создает экземпляр фиктивного объекта и заполняющий каждое из полей не-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, но это не имеет никакого эффекта. Я подозреваю, что это связано с тем, что PERSONID является неавтогенерированным первичным ключом.

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

+0

В «нормальном» случае Spring Roo создает свои собственные поля идентификатора в одном из своих аспектов (я верю в xx_entity.aj) - Вы дезактивировали поле идентификатора roo manged ID? - И будет ли это работать, если вы используете управляемый идентификатор roo? – Ralph 2010-12-01 22:06:53

ответ

0

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

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

Смежные вопросы