I have two fields of an entity class which I don\'t want to be unique but to instead be used as composite fields for a key which must itself be unique. For example I have t
We usually will wrap the two fields in an inner key class which is marked as @Embeddable. For example:
@Entity
public class Foo {
@EmbeddedId()
private Key key;
...
@Embeddable
public static class Key {
@Column(nullable=false)
private String name;
@Column(nullable=false)
private int version;
protected Key () {
// for hibernate
}
public Key (String name, int version) {
this.name = name;
this.version = version;
}
...
// You probably want .equals and .hashcode methods
}
}
This will create a unique key on the database:
@Table( name = "MYTABLE",
uniqueConstraints = { @UniqueConstraint( columnNames = { "NAME", "VERSION" } ) } )
This will be enforced by the database on a update or persist.
You'd need to write your own custom validator if you wanted to enforce this using Hibernate Validator.