tags:

views:

200

answers:

2

I am trying to introduce a multi-key constraint on a JPA-mapped entity:

public class InventoryItem {
    @Id
    private Long id;

    @Version 
    private Long version;

    @ManyToOne
    @JoinColumn("productId")
    private Product product;

    @Column(nullable=false);
    private long serial;
}

Basically (product, serial) pair should be unique, but I only found a way to say that serial should be unique. This obviously isn't a good idea since different products might have same serial numbers.

Is there a way to generate this constraint via JPA or am I forced to manually create it to DB?

+2  A: 

You can declare unique constraints using the @Table(uniqueConstraints = ...) annotation in your entity class, i.e.

@Entity
@Table(uniqueConstraints=
           @UniqueConstraint(columnNames = {"productId", "serial"}) 
public class InventoryItem {
    ...
}

Note that this does not magically create the unique constraint in the database, you still need a DDL for it to be created. But seems like you are using some sort of automated tool for creating the database based on JPA entity definitions.

psp
Thanks, this was exactly what I was looking for.
plouh
+2  A: 

You can do this via a Unique constraint on the Table/Entity, see this link:

http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html#UniqueConstraint

bert
Thanks, this was it.
plouh