2013-05-06 4 views
1

Допустим, у меня есть объект вроде этого:Положив ограничение уникальности на нескольких полях

@Entity 
public Foo { 
    @Id 
    private Long id; 

    private String name; 

    private String type; 

    ... 
} 

Есть ли способ, чтобы выразить это имя и тип должен быть уникальным вместе? Это означает, что вы могли бы назвать «x» с типом «y» и «x» с типом «z», но не другим «x» с типом «y».

@EmbeddedId не делает трюк, поскольку имя может быть изменено позже - тип, однако, остается неизменным на протяжении всего жизненного цикла объекта.

+1

Вам нужно изучить ограничения. [Это должно ответить на ваш вопрос] (http://stackoverflow.com/questions/2772470/how-to-introduce-multi-column-constraint-with-jpa-annotations). –

+0

, по существу делая их уникальными вместе – Zoltan

+0

С '@ UniqueConstraint', да. –

ответ

2

Вы можете добавить Ограничения для своей сущности в аннотацию @Table. В вашем случае вы хотите сделать два объединенных поля уникальными. Вы должны использовать аннотацию @UniqueConstraint.

@Entity 
@Table(uniqueConstraints= 
      @UniqueConstraint(columnNames = {"name", "type"}) 
public Foo { 
    @Id 
    private Long id; 
    @Column 
    private String name; 
    @Column  
    private String type; 

    ... 
} 

Take a look at the javadoc for @UniqueConstraint.

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