DAO 接口:2 个实体(Java、Hibernate)的实现
Posted
技术标签:
【中文标题】DAO 接口:2 个实体(Java、Hibernate)的实现【英文标题】:DAO interface: Implementation for 2 entities (Java, Hibernate) 【发布时间】:2020-06-25 22:12:16 【问题描述】:我有 2 个实体 Student 和 Intsructor。我想用 Dao 实现为两个实体实现 Dao 接口。我将一个班级用户设置为 Student an Instructor 的父母:
@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 类中我只有其中的一些。 Student 和 Instructor 除了继承属性外,还有自己的属性。
如何实现 DAO 和实体。在这种情况下有什么好的做法?
谢谢
【问题讨论】:
您应该为每个实体创建一个 DAO。为什么?稍后您可能需要Student
的一些特定功能,因此您只需修改学生 DAO。创建测试会更容易,让你的代码更干净、更小等等。
感谢您的回答塞巴斯蒂安。这意味着即使我有 20 个实体,我也应该为所有实体创建 20 个 DAO 接口和 20 个实现?
不是真的,当你有这么多实体时,有一些不错的选择,比如使用泛型。
好的,谢谢。我会尝试使用泛型。
【参考方案1】:
您可以尝试使用泛型。
public interface GenericDAO<T>
List<T> getAll();
并且在需要的时候,你可以扩展和定义具体的功能。
public interface UserDAO extends GenericDAO<User>
User getAllWithAvatar();
希望这会有所帮助!
【讨论】:
以上是关于DAO 接口:2 个实体(Java、Hibernate)的实现的主要内容,如果未能解决你的问题,请参考以下文章
java web spring jpa 在以接口为dao的方法里使用原生sql,联合查找没有对应实体,用啥来接收? 求大神
java开发时为啥要dao和service都是model层吗?