JPA映射接口

时间:2008-11-11 17:09:44

标签: java hibernate orm jpa interface

当List类型是接口时,我在创建映射时遇到问题。看起来我需要创建一个抽象类并使用鉴别器列就是这种情况?我宁愿不必,因为抽象类只包含一个抽象方法,我宁愿保留接口。

我有一个界面让我们称之为帐户

public interface Account {
 public void doStuff();
}

现在我有两个Account的具体实现者 OverSeasAccount和OverDrawnAccount

public class OverSeasAccount implements Account {
 public void doStuff() {
   //do overseas type stuff
 }
}

public class OverDrawnAccount implements Account {
 public void doStuff() {
   //do overDrawn type stuff
 }
}

我有一个名为Work with a List

的课程
private List<Account> accounts; 

我正在查看discriminator字段,但我似乎只能在抽象类中执行此操作。是这样的吗?任何指针赞赏。我可以在接口上使用鉴别器吗?

2 个答案:

答案 0 :(得分:2)

我认为可以使接口成为映射的超类型。您可能无法使用注释。注释适用于xml配置文件,因此您可能必须使用所需的映射将hibernate配置文件添加到项目中。但是你可以保留项目其余部分的注释。

This问题更多地讨论了它。它似乎以一个关于如何使用注释来做到这一点的建议结束,所以谁知道。我建议xml现在仍然更安全这个文档的page解释了所需的xml映射。

答案 1 :(得分:0)

您也可以在不删除界面的情况下引入抽象类。

// not an entity
public interface Account {
    public void doStuff();
}

@Entity
public abstract class BaseAccount {
    public void doStuff();
}


@Entity
public class OverSeasAccount extends AbstractAccount {
    public void doStuff() { ... }
}

@Entity
public class OverDrawnAccount extends AbstractAccount {
    public void doStuff() { ... }
}