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



这是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',我需要每个公司的"内部"订单_id。

您的代码示例中没有出现@TableGenerator。我假设您希望使用@GeneratedValue生成值。

对于JPA 2.0,根据规范,您不能将@GeneratedValue用于不属于主键的字段:

GeneratedValue注释可以应用于主键属性或实体或映射超类的字段以及Id注释。[97]

[97]便携式应用程序不应使用其他持久字段或属性上的GeneratedValue注释。

最新更新