2016-05-06 2 views
0

У меня есть несколько лиц с один на один отношений как таковых:JPA один-к-одному, без отображения столбца

@Entity(name="stores") 
public class Store implements Serializable { 
    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    @Column(name="id") 
    private int id ; 
    // How should I set goal ? 
    private Goal goal ; 
} 

и:

@Entity(name="storeGoals") 
public class Goal { 
    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    @Column(name="goalId") 
    private int id ; 

    @OneToOne() 
    @JoinColumn(name = "storeId") 
    private Store store ; 

} 

Моя проблема заключается в том, как может Я установил поле «цель» в объекте Store?

Обычно я хотел бы сделать что-то вроде:

@Entity(name="stores") 
    public class Store implements Serializable { 
     ... 
     @OneToOne() 
     @JoinColumn(name = "goalId") 
     private Goal goal ; 
     ... 

, но в этом случае я не могу, потому что «магазины» стол, лежащий в основе принадлежит к другому приложению и не может быть изменен (путем добавления " goalId ").

Что мне нужно для экземпляра магазина, чтобы иметь возможность найти его цель, найдя запись в таблице storeGoals, которая имеет тот же storeId (понимая, конечно, что я могу столкнуться с проблемами ссылочной целостности ...)

Любые идеи о том, как это сделать? Спасибо!

+0

Что storegoals стол? Разве вы не просто пытаетесь повторно использовать отношение ключа Goal.storeId foriegn или существует реляционная таблица «storeGoals», которая существует для сопоставления двух таблиц? – Chris

ответ

0

Возможно, вы ищете так называемые двунаправленные отношения OneToOne. Это работает так же, как двунаправленное отношение ManyToMany или OneToMany/ManyToOne, в котором одна сторона «владеет» отношениями и имеет контроль над установкой значения во внешнем ключе; другой указывает, что он «отображен» другой стороной и работает так, как будто он доступен только для чтения. Обе стороны должны быть синхронизированы с любыми изменениями вручную; если вы установите одну сторону, но не будете отражать изменения в другой, JPA не исправит это для вас.

В этом случае:

public class Store implements Serializable { 
    .. 
    @OneToOne(mappedby="store") 
    private Goal goal ; 
} 
+0

Было так просто, мне стыдно, что я должен был спросить! – Eric

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