@OneToMany JPA与同一班级

时间:2016-02-28 19:08:45

标签: jpa one-to-many entity-relationship many-to-one

我正在构建一个简单的Spring应用程序,我需要帮助为一些JPA实体找到合适的设计,以下是我的情况:

  • 一个FirstResource有很多动作
  • 一个SecondResource有很多动作
  • 一个ThirdResource有很多动作
  

我的目标:我希望能够为特定内容添加操作   例如,资源,或列出对资源执行的所有操作。

4个实体是(FirstResource,SecondResource,ThirdResource,Action),它们应该是这样吗? :

@Entity
public class Action implements Serializable {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idAction;
    private String nameAction; // + gettes & setters...
}

@Entity
public class FirstResource implements Serializable {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idFirstResource;
    private int unitNumber; // + gettes & setters...
}

@Entity
public class SecondResource implements Serializable {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idSecondResource;
    private String nameSecondResource; // + gettes & setters...
}

@Entity
public class ThirdResource implements Serializable {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idThirdResource;
    private boolean Confirmed; // + gettes & setters...
}

Action应该为每个@ManyToOne添加带Resources注释的引用吗?如果是,有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用继承。

将抽象类AbstractResource定义为实体:

@Entity
public abstract class AbstractResource implements Serializable {
  @Id @GeneratedValue
  private long id;

  @OneToMany
  private List<Action> actions;
...
}

然后确保您的资源类扩展AbstractResource:

@Entity
public class FirstResource extends AbstractResource

然后您可以在Action实体中引用您的资源:

@Entity
public class Action implements Serializable {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idAction;

    @ManyToOne
    private AbstractResource resource;
 ...
}

由于你不能将MappedSuperClass与ManyToOne关系一起使用,你不能在你的情况下使用@MappedSuperClass。