如何将@TableGenerator注释用于非PK id

时间:2012-03-28 19:17:10

标签: java java-ee entity jpa-2.0 entity-relationship

这是JPA实体架构的摘录



    @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;

    //...

    }

我需要为每个Company_id检索一个唯一的internalCompanyOrderId序列。这意味着订单PK将是'order_id',我需要每个公司的“内部”order_id。

1 个答案:

答案 0 :(得分:2)

代码示例中没有@TableGenerator。我假设你想用@GeneratedValue生成价值。

JPA 2.0是什么,根据规范你不能将@GeneratedValue用于不属于主键的字段:

  

GeneratedValue注释可以应用于主键属性   或实体的字段或映射的超类与Id一起使用   注解。 [97]
  ...
  [97]便携式应用程序不应使用   对其他持久字段或属性的GeneratedValue注释。