2010-04-30 4 views
2

сценарий, как показано ниже (таблицы показаны)Интерфейс между двумя связанными сторонами JPA

Delivery table 
------ 
id channelId type 
10 100   fax 
20 200   email 

Fax table 
---- 
id number 
100 1234567 
101 1234598 

Email table 
----- 
id email 
200 [email protected] 
201 [email protected] 

в основном 12:59 отношения между поставкой и объектом канала, но так как каждый конкретный канал (факс, электронная почта) имеет разные Я хочу создать общий интерфейс (канал) между двумя объектами и использовать его для отношений @OneToOne. Мне кажется, простой сценарий, когда вы, возможно, уже прошли, но я не могу добиться успеха. Я попытался поставить эту цель targetEntity, но не использовать. Все еще говорит, что «ссылки на доставку неизвестны»

Любые идеи? заранее спасибо

ответ

1

Как насчет использования abstract суперкласса для Channel и стратегии наследования TABLE_PER_CLASS? Что-то вроде этого:

@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public abstract class Channel { 
    @Id 
    @GeneratedValue 
    private Long id; 

    // ... 
} 

@Entity 
public class Fax extends Channel { 
} 

@Entity 
public class Email extends Channel { 
} 

@Entity 
public class Delivery { 
    @Id 
    @GeneratedValue 
    private Long id; 

    @OneToOne 
    private Channel channel; 

    // ... 
} 
+0

Pascal - спасибо. Это то, что я думал после публикации вопроса и во время поездки домой :) Я вернусь и опубликую, что получится, или если у меня все еще есть некоторые проблемы. Еще раз спасибо – OpenSource

+0

Я только что создал конкретный суперкласс (Delivery) и сделал Fax и Email в качестве подклассов. Это работает для моей ситуации. При необходимости я все же могу заставить их внедрить интерфейс для некоторого полиморфизма позже. Благодарю. – OpenSource