Уникальное ограничение не применяется в SchemaExport Hibernate - PullRequest
2 голосов
/ 03 января 2011

Я совершенно не уверен, почему мой класс сущностей не создает необходимую схему таблицы

@Entity
@Table(name = "User")
public class User implements Serializable {
    private Long id;
    private String loginName;

    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }
    @Column(name = "login_name", unique = true)
    public String getLoginName() {
        return loginName;
    }
    //other setters
}

Когда я использую экспорт схемы.

new SchemaExport(config).create(true, true);

Он создает этот SQL, но затемне добавляет никаких уникальных ограничений к моему полю login_name.

drop table User
create table User (id bigint generated by default as identity, login_name varchar(255)primary key (id))

Я использую Apache Derby и проверил справочное руководство по Derby, и он поддерживает ограничение Unique для столбца.Я попытался добавить аннотацию уникального ограничения на класс, но результат тот же.

Есть идеи?

1 Ответ

7 голосов
/ 04 января 2011

Проблема в том, что Derby расширяет диалект DB2, который указывает, что "поддерживаетNotNullUnique" как "ложно".Таким образом, решение состоит в том, чтобы либо создать свой собственный диалект дерби и изменить этот метод, чтобы он возвращал значение «true», либо пометить поле как nullable = false.

@Column(name = "login_name", unique = true, nullable=false)

или

import org.hibernate.dialect.DerbyDialect;

public class CustomDerbyDialect extends DerbyDialect {
    public boolean supportsNotNullUnique() {
        return true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...