2013-11-08 3 views
0

У меня есть объект Y и хотел бы встроить Список Y в несколько несвязанных объектов X1, X2, ... Отношение должно быть двунаправленным. Можно ли это сделать с помощью @ ManyToOne/@ OneToMany? Я пробовалJPA: Как использовать @OneToMany с разными целевыми типами

@Entity 
class X1 { 
    @Id 
    String uuid_; 

    @OneToMany(mappedBy="owner_") 
    List<Y> yList_; 
} 

@Entity 
class X2 { 
    @Id 
    String uuid_; 

    @OneToMany(mappedBy="owner_") 
    List<Y> yList_; 
} 

@Entity 
class Y { 
    @Id 
    String uuid_; 

    @ManyToOne 
    String owner_; 
} 

но это не работает, потому что String не является сущностью и не может использоваться как атрибут отношения.

Я также попытался заменить «владельца строки» на «владелец XBase», используя XBase в качестве @MappedSuperClass для X1 и X2. Это вызвало ту же ошибку: «[класс Y] использует не-сущность [класс XBase] как целевой объект в атрибуте отношения [field owner_]».

Интересно, возможно ли иметь разные несвязанные типы в «одном» конце отношения. Как бы вы реализовали такие отношения с JPA?

ответ

0

Поскольку X1 и X2 являются «несвязанными типами», невозможно объединить их в одном сопоставлении. Вы должны иметь два различных @ManyToOne отображения в Y:

@Entity 
class Y { 
    @Id 
    String uuid_; 

    @ManyToOne 
    X1 owner1_; 

    @ManyToOne 
    X2 owner2_; 
} 

И тогда, конечно, вам нужно настроить значение атрибута mappedBy соответственно в @OneToMany отображений.

Смежные вопросы