2013-05-24 6 views
0

я получил 2 EntitiesJPA (EclipseLink) @OneToMany пропускает некоторые entrys

Customer.class

@Entity 
@Table(name = "Customer") 
public class Customer { 
    @Id 
    private int id; 
    @OneToMany(mappedBy = "customer"; fetch = FetchType.EAGER) 
    private Set<Invoice> invoice; 
} 

и

Invoice.class

@Entity 
@Table(name = "Invoice") 
public class Invoice { 
    @Id 
    @ManyToOne 
    @JoinColumn(name = "customer") 
    private Customer customer; 
    @Column(name = "price", nullable = false) 
    private double price; 
} 

Они оба отображаются в persistence.xml.

Итак:

System.out.println(customer); 

для конкретного клиента дает мне 30 entrys счета-фактуры, но я получил 33 в базе данных.

Я использую org.eclipse.persistence.jpa 2.5.0 и персистенции-API 1.0.2

Я ценю каждый намек/решение.

Заранее спасибо.

+3

Это отображение не имеет никакого смысла. Как клиент может быть идентификатором счета-фактуры, поскольку на обычных счетах есть один и тот же клиент? Идентификатор должен быть уникальным. –

+0

ПК в базе данных состоит из нескольких столбцов. Должен ли я использовать EmbeddedId? Как следует выглядеть ManyToOne и JoinColumn? Спасибо – Beig

+0

Показать полное сопоставление. –

ответ

0

Извините за последний ответ Я нашел проблему/ответ.

После простой попытки @EmbeddedId мне пришлось объявить @JoinColumn вставляемым и обновляемым ложным.

Право отображение для Invoice.class

@Entity 
@Table(name = "Invoice") 
public class Invoice { 
    @EmbeddedId 
    private InvoiceId invoiceId; 
    @ManyToOne 
    @JoinColumn(name = "customerId", insertable = false, updatable = false) 
    private Customer customer; 
    @Column(name = "price", nullable = false) 
    private double price; 
} 

@Embeddable 
class InvoiceId implements Serializable { 
    //Composite PK 
    @Column(name = "customerId") 
    private int customerId; 
    @Column(name = "date") 
    private Date date; 
}