Настроить Hibernate 4.1, JPA2 с Spring 3.1.1.обновить схему БД из JSR 303 Аннотации - PullRequest
1 голос
/ 06 марта 2012

В моей текущей конфигурации Hibernate 4.1 + JPA 2 + Spring 3.1.1 сгенерированный оператор create table не учитывает аннотацию JSR 303 @javax.validation.constraints.NotNull.

Объявление класса:

@Entity
public class MenuItem implements Serializable {
    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String title;

    @NotNull    // <--- JSR 303 constraint annotation
    private String description;

    ...
}

Сгенерированный оператор create table:

create table menu_item (
    id bigint generated by default as identity,
    description varchar(255),   // <--- should be not null
    price binary(255),
    title varchar(255),
    primary key (id)
)

Однако, если я добавлю аннотацию JPA @javax.persistence.Column, оператор create table будет сгенерирован правильно.

Объявление класса:

@Entity
public class MenuItem implements Serializable {
    @Id @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String title;

    @NotNull                 // <--- JSR 303 constraint annotation
    @Column(nullable=false)  // <--- JPA annotation
    private String description;

    ...
}

Сгенерированный оператор create table:

create table menu_item (
    id bigint generated by default as identity,
    description varchar(255) not null,   // <--- generated not null
    price binary(255),
    title varchar(255),
    primary key (id)
)

Можно ли настроить Hibernate 4.1 + JPA 2 + Spring 3.1.1 для генерации схемы БД только из аннотаций JSR 303?

1 Ответ

1 голос
/ 07 марта 2012

Нет, это невозможно. Только в том случае, если мы расширим определение конфигурации для реализации, это возможно. Сам JPA 2 дает около двух страниц в спецификации для проверки Бина. Также о генерации схемы БД из отображений не так уж и строго:

Разрешено, но не обязательно, чтобы генерация DDL поддерживалась реализация этой спецификации.

Кроме того, я не в курсе, что Hibernate или Spring предоставляют такую ​​функциональность. Конечно, немного повторяется использование @NotNull & nullable = false.

...