2012-03-28 11 views
0

ist dies ein Extrakt der Entitäten JPA SchemaWie die @TableGenerator Anmerkung für eine nicht-PK-ID verwenden



    @Entity 
    @Table(name="customer") 
    public class Customer implements Serializable { 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     @Column(name="customer_id") 
     private Long id; 

     @ManyToOne 
     @JoinColumn(name="company_id",nullable=false) 
     private Company company; 

    //... 

    } 

    @Entity 
    @Table(name="company") 
    public class Company implements Serializable { 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     @Column(name="company_id") 
     private Long id; 

    //... 

    } 

    @Entity 
    @Table(name="order_header") 
    public class OrderHeader implements Serializable { 

     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     @Column(name="order_id") 
     private Long id; 


     @ManyToOne 
     @JoinColumn(name="customer_id",nullable=false) 
     private Customer customer; 

     private Long internalCompanyOrderId; 

    //... 

    } 

Ich brauche eine einzigartige internalCompanyOrderId Sequenz für jede company_id retreive. Es bedeutet, dass der Order PK trotzdem 'order_id' ist, ich brauche eine 'interne' order_id für jedes Unternehmen.

Antwort

2

Es ist kein Vorkommen von @TableGenerator in Ihrem Codebeispiel vorhanden. Ich nehme an, dass Sie Wert mit @GeneratedValue generieren möchten.

Was es zu JPA kommt 2.0, gemäß Spezifikation Sie können nicht @GeneratedValue für das Feld verwenden, die nicht Teil des Primärschlüssels ist:

Die GeneratedValue Anmerkung in eine Primärschlüsseleigenschaft angewandt werden kann oder Feld eine Entity oder eine zugeordnete Superklasse in Verbindung mit der ID Annotation. [97]
...
[97] Portable Anwendungen sollten die Annotation GeneratedValue nicht für andere persistente Felder oder Eigenschaften verwenden.

+0

Ok, das ist klar. Danke für Ihre Antwort. Nun besteht das Problem darin, wie man eine Sequenz erhält und Nebenläufigkeitsprobleme vermeidet (doppelte oder mehr identische "internalCompanyOrderId" -Werte). Können Sie eine funktionierende Lösung vorschlagen? Vielleicht ein benutzerdefinierter Sequenzgenerator? – medveshonok117

Verwandte Themen