Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[eclipselink-users] OneToOne, Composite Primary Key, Foreign Key

Hi everybody.

I have problem with OneToOne-Mappings. The related entities share one field of the primary key. This field ist also a foreign key. So, it looks like:

Address
-------
company        PK, FK
address        PK
person             FK
street
city


Person
------
company        PK
person         PK
firstname
lastname


The tables are currently mapped in following way:

public class Address implements Serializable
{
    public static final long serialVersionUID = 2L;

    @Id
    @Column(name = "address")
    private int address;

    @Id
    @Column(name = "company")
    private int company;

    @Column(name = "street")
    private String street;

    @Column(name = "city")
    private String city;

    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumns({
        @JoinColumn(name="person", referencedColumnName="person"),
        @JoinColumn(name="company", referencedColumnName="company",
            insertable=false, nullable=false, updatable=false)
    })
    private Person person;

    // getters and setters
}

@Entity
@Table(name = "person")
@IdClass(PersonPk.class)
public class Person implements Serializable
{
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "person")
    private int person;

    @Id
    @Column(name = "company")
    private int company;

    @Column(name = "firstname")
    private String firstname;

    @Column(name = "lastname")
    private String lastname;

    @OneToOne(mappedBy="person", cascade=CascadeType.ALL)
    private Address address;

    // getters and setters
}

Reading data works without errors. But, e.g. if I want to update or insert an Address entity, all fields will be updated in database except the person column. What's wrong with my mapping?

Thanks for helping!

Max



Back to the top