persistence@glassfish.java.net

Unidirectional OneToMany

From: Antonio Goncalves <antonio.mailing_at_gmail.com>
Date: Fri, 3 Nov 2006 21:29:59 +0100

Hi.

I'm using GlassFish V2b24. I want to model a unidirectional OneToMany
relationship between the two classes Order -----*-> OrderLine. A
bi-directional relation works fine (addind a Order attribut into OrderLine),
but I can't make the unidirectional work. Here is the code (simplified) :


public class *Order* implements Serializable {
    @Id @GeneratedValue
    private Long id;
    @ManyToOne @JoinColumn(name = "customer_fk", nullable = false)
    private Customer customer;
* private List<OrderLine> orderLines;
*}

public class *OrderLine* implements Serializable {
    @Id @GeneratedValue
    private Long id;
    private Integer quantity;
    @OneToOne(optional = false) @JoinColumn(name = "item_fk")
    private Item item;
}

That works at deployment and creates both tables but without any foreign key
or a join table between them. When I add the @OneToMany annotation :

    *_at_OneToMany
    private List<OrderLine> orderLines;*

It produces the following error at deployment :

org.apache.derby.client.am.SqlException: 'ORDER_FK' is not a column in table
or VTI 'DBUSER.T_ORDER_LINE'.

And I would love to have a foreign key order_fk. I've also
read<http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html#OneToMany>that
for a unidirectional I need to use the mappedBy attribute. But this is
what happens

@OneToMany(*mappedBy = "order"*)
private List<OrderLine> orderLines;

Exception Description: The attribute [orderLines] in entity class [class
com.yaps.petstore.entity.order.Order] has a mappedBy value of [*order*]
which does not exist in its owning entity class [class
com.yaps.petstore.entity.order.OrderLine]. If the owning entity class is a
@MappedSuperclass, this is invalid, and your attribute should reference
the correct subclass.

What am I doing wrong ? Does anybody have an idea ?

Thanks,

Antonio