Как использовать аннотацию @TableGenerator для идентификатора не-PK - PullRequest
0 голосов
/ 28 марта 2012

Это фрагмент схемы сущностей 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;

    //...

    }

Мне нужно получить уникальную последовательность internalCompanyOrderId для каждого Company_id. Это означает, что, тем не менее, Order PK будет 'order_id', мне нужен "внутренний" order_id для каждой компании.

1 Ответ

2 голосов
/ 01 апреля 2012

В вашем примере кода не встречается @TableGenerator. Я предполагаю, что вы хотите создать значение с @ GeneratedValue.

Что касается JPA 2.0, согласно спецификации нельзя использовать @GeneratedValue для поля, которое не является частью первичного ключа:

Аннотация GeneratedValue может применяться к свойству первичного ключа или поле сущности или сопоставленного суперкласса в сочетании с идентификатором аннотаций. [97]
...
[97] Портативные приложения не должны использовать Аннотация GeneratedValue для других постоянных полей или свойств.

...