@onetoone и @EmbeddedId - PullRequest
       1

@onetoone и @EmbeddedId

0 голосов
/ 18 сентября 2011

Я пытаюсь создать взаимно-однозначное отношение между классами, давайте назовем его «Первый», а другой - назовем его вторым.

Это не позволит мне сделать это, если класс Second использует @EmbeddedId в качестве первичного ключа, как мне обойти это?

В основном структуры выглядят следующим образом:

@Entity
class First {
     private Integer id;
     private Second second;

     @OneToOne
     @JoinColumn(name="id",  referencedColumnName="parentId", nullable=true)        
     public Second getSecond() {return second;}
     ... snip irrelevant methods ...
}

@Entity
class Second{
     private Integer id;
     private Integer parentId;
     ... snip irrelevant methods ...
}

выше работает нормально, но если я изменю его на

@Entity
class Second{
     private MyCustomKey key;
     private Integer parentId;
     ... snip irrelevant methods ...
}

Я получаю ошибку "Сломанное отображение".

Я не вижу разницы, так как оба идентификатора назначены вручную? И рабочая версия с целочисленным идентификатором, и встроенный идентификатор.

1 Ответ

1 голос
/ 19 сентября 2011

Вот код, который работает для меня.

Первая сущность

@Entity
public class Ent1 implements Serializable {

    private static final long serialVersionUID = -5580880562659281420L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    public void setId(Integer id) {
        this.id = id;
    }

    public void setA(Integer a) {
        this.a = a;
    }

    private Integer a;

    @OneToOne
    @JoinColumn(name="second",  referencedColumnName="parentId", nullable=true) 
    private Ent2 second;

    public void setSecond(Ent2 second) {
        this.second = second;
    }
}

Второй класс сущности (с составным ПК)

@Entity
public class Ent2 implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = -1554968351865549494L;

    @EmbeddedId
    private Ent2Id id;

    public Ent2Id getId() {
        return id;
    }

    public void setId(Ent2Id id) {
        this.id = id;
    }

    public Integer getParentId() {
        return parentId;
    }

    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }

    Integer parentId;
}

И Мой пользовательский ключ класса

@Embeddable
public class Ent2Id implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 3000940427471306899L;

    Integer eid1 = 0;
    Integer eid2 = 1;

    public Ent2Id() {

    }

    public Ent2Id(Integer a, Integer b) {
        eid1 = a;
        eid2 = b;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...