Работая над моим весенним проектом MVC, я сталкиваюсь со следующей проблемой:
У меня есть классы сущностей UnitAppUser, VStanAppUser и RjuAppUser, которые расширяют сущность User. Пользовательский объект хранит некоторую общую информацию. Остальные наследующие сущности хранят ссылки на конкретные сущности (у UnitAppUser есть поле типа Unit, у VStanAppUser есть тип VStan и т. Д.).
Вот мой родительский пользовательский объект
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name="app_user")
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 6628717324563396999L;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@NotEmpty
@Column(name="SSO_ID", unique=true, nullable=false)
private String ssoId;
@NotEmpty
@Column(name="PASSWORD", nullable=false)
private String password;
@NotEmpty
@Column(name="FIRST_NAME", nullable=false)
private String firstName;
@NotEmpty
@Column(name="LAST_NAME", nullable=false)
private String lastName;
@NotEmpty
@Column(name="EMAIL", nullable=false)
private String email;
}
Вот мои детские классы:
@Entity
@Table(name = "unit_app_user")
public class UnitAppUser extends User implements Serializable {
@JoinColumn(name = "UNITWORK", referencedColumnName = "ID")
@ManyToOne(optional = false)
private UnitDepart unitdepart;
public UnitDepart getWorkat() {
return unitdepart;
}
public void setWorkat(UnitDepart unitdepart) {
this.unitdepart = unitdepart;
}
}
@Entity
@Table(name="rju_app_user")
public class RjuAppUser extends User implements Serializable{
@JoinColumn(name = "workrju", referencedColumnName = "id")
@ManyToOne(optional = false)
private Rju rju;
public Rju getWorkat() {
return rju;
}
public void setWorkat(Rju rju) {
this.rju = rju;
}
}
и, наконец, моя сущность VStan:
@Entity
@Table(name="vstan_app_user")
public class VstanAppUser extends User implements Serializable{
@JoinColumn(name = "WORKSTATION", referencedColumnName = "kod")
@ManyToOne(optional = false)
private Vstan vstan;
public Vstan getWorkat() {
return vstan;
}
public void setWorkat(Vstan vstan) {
this.vstan = vstan;
}
}
Как написать общий дао и сервис для получения конкретной сущности?
В результате у меня должно получиться что-то вроде этого
userService.findBySSOId("somessoId").getWorkat() //should return UnitDepart, Rju or VStan