Интерфейс DAO: реализация для 2 объектов (Java, Hibernate) - PullRequest
0 голосов
/ 14 марта 2020

У меня есть 2 лица Студент и Intsructor. Я хочу реализовать интерфейс Dao с реализациями Dao для двух объектов. Я назначил одного пользователя класса в качестве родителя ученика инструктора:

@MappedSuperclass 
public abstract class User {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name = "name")
    private String firstName;

    @Column(name = "password")
    private String password;

    @Column(name = "email")
    private String email;

    getters and setters ...

}

и детей. Студент

@Entity 
@Table(name = "student", schema="els")
public class Student extends User {
    @Column(name="achiev")
    private String achievment;      


   public Student() {
   }

   getter and setter for achievment

}

и Инструктор

@Entity
@Table(name = "instructor", schema="els")
public class Instructor extends User {

    @Column(name = "reputation")
    private int reputation;

    public Instructor() {
    }

    public int getReputation() {
        return reputation;
    }

    public void setReputation(int reputation) {
        this.reputation = reputation;
    }
}

Интерфейс Дао:

public interface DAO {
    List<User> getAllUsers();

    ...

}

с реализациями DAO для двух сущностей.

Но есть проблема. Я не могу сохранить все свойства каждого объекта, потому что в классе User у меня есть только некоторые из них. Студент и Инструктор, кроме унаследованных свойств, имеют свои собственные.

Как я могу реализовать DAO и сущности. Что такое хорошая практика c в этой ситуации?

Спасибо

1 Ответ

1 голос
/ 14 марта 2020

Вы можете попробовать использовать дженерики.

public interface GenericDAO<T> {
  List<T> getAll();
}

А при необходимости вы можете расширять и определять специфические c функции.

public interface UserDAO extends GenericDAO<User> {
    User getAllWithAvatar();
}

Надеюсь, это поможет!

...