Mit @OneToOne in PlayFramework 2 / Ebean ORM, wo die Kinder und Eltern mit demselben Primärschlüssel

Gibt es zwei Modelle:

models/User.java

@Entity
@Table(name="users")
public class User extends Model
{
    @Id
    public int user_id;
    public String firstName;
    public String lastName;

    @OneToOne
    @PrimaryKeyJoinColumn
    public UserProfile profile;

    public static Finder<Integer,User> find = new Finder<Integer,User>( Integer.class, User.class );
}

models/UserProfile.java

@Entity
@Table(name="user_profiles")
public class UserProfile extends Model
{
    @Id
    public int user_id;
    public String bio;

    @OneToOne(mappedBy = "user_id")
    public User user;

    public static Finder<Integer,UserProfile> find = new Finder<Integer,UserProfile>( Integer.class, UserProfile.class );
}

einige Daten:

INSERT INTO users VALUES(1,"Joe","Bloh");
INSERT INTO users VALUES(2,"Maria","Luis");
INSERT INTO user_profiles VALUES(1, "programmer");
INSERT INTO user_profiles VALUES(2, "tester");

und denselben code, der holt sich das Profil von einem user:

User user = User.find.byId(2);
UserProfile profile = UserProfile.find.byId(1);

was löst die Ausnahme:

javax.persistence.PersistenceException: Error on models.UserProfile.user. mappedBy property [models.UserBad.user_id]is not a OneToOne?

Wie kann man zwei Modelle teilen sich den gleichen Primärschlüssel in Ebean ORM, und haben eine @OneToOne Beziehung ?

InformationsquelleAutor David | 2013-08-28
Schreibe einen Kommentar