2016-02-28 2 views
0

Я строй простого Spring Application, мне нужно помочь найти правильный дизайн для некоторых лиц JPA, вот так, что у меня есть:@OneToMany JPA отношение к тому же классу

  • Один FirstResource имеет много Действия
  • Один SecondResource имеет много действия
  • Один ThirdResource имеет много Actions

Моя цель: я хочу иметь возможность добавлять действия к определенному ресурсу или перечислять все действия, выполняемые на ресурсе, например.

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:

@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