2011-01-03 2 views
2

Я совершенно не уверен, почему мой класс сущности не создает свою требуемую схему таблицыУникальный Constraint Не Принудительно на SchemaExport из Hibernate

@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, и я проверил справочник Дерби и он поддерживает ограничение уникальности на колонке. Я попытался добавить аннотацию uniqueconstraint в классе, но результат тот же.

Любая идея?

+1

и это все из SQL? по моему опыту, обычно есть инструкция ALTER TABLE, чтобы добавить ограничение UNIQUE ... – kem

ответ

7

Проблема заключается в том, что Derby расширяет Диалог DB2, который указывает, что «поддерживаетNotNullUnique» как «false». Таким образом, решение состоит в том, чтобы либо создать свой пользовательский диалект Derby, либо изменить этот метод, чтобы вернуть «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; 
    } 
} 
+0

Спасибо. Я попробую это, когда вернусь домой. –

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