2016-02-28 95 views
0

我建立一個簡單的Spring應用,我需要幫助找到一些JPA實體正確的設計,這裏的情況,我有:@OneToMany 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

你可以使用繼承。

定義一個抽象類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 

然後,你可以參考你的行動實體內部的資源:

@Entity 
public class Action implements Serializable { 

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

    @ManyToOne 
    private AbstractResource resource; 
... 
} 

由於您無法將MappedSuperClass與ManyToO一起使用ne關係,你不能在你的情況下使用@MappedSuperClass。

+0

我明白了,那就是我要做的。謝謝。 – dwix