[英]Hibernate model class and helper method best practices
請考慮以下(部分)課程:
@Entity
@Table(name = "account", catalog = "storeman", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class Account implements java.io.Serializable {
private Integer id;
private String email;
private String displayName;
...
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
@Column(name = "email", unique = true, nullable = false, length = 80)
public String getEmail() {
return this.email;
}
@Column(name = "display_name", nullable = false, length = 50)
public String getDisplayName() {
return this.displayName;
}
public static Account lookup(String email, Session session){
return (Account)
session.createCriteria(Account.class)
.add(Restrictions.eq("email", email))
.uniqueResult();
}
}
如您所見,它映射了使用id
作為主鍵的mydb account
表。 但是,在數據庫中搜索“帳戶”時,我想使用電子郵件作為選擇標准。 為此,我添加了一個名為lookup
的靜態方法來執行查詢。 就我所知,這很好。 但是,我想問一下,在使用休眠(使用JDBC的動態Web項目)時,這種方法是否是一種好習慣,以及這會帶來什么樣的問題(如果有)。
如果為模型Account創建一個說AccountDAO的DAO類,然后將查找方法移動到AccountDAO,那會更好。
在我的書中,傳遞session
(或EntityManager
或幾乎任何其他服務對象)不是一個好習慣。 這樣做足夠多,您將發現自己難以收集和控制調用數據庫的位置。 Service
對象應該是“使用”數據對象的對象,而不是相反。
正確的做法是創建一個Repository
-service,該服務包含獲取session / EntityManager的方法,以及對該實體/功能區域執行JPA操作的方法。
因此,我將把查詢移出Entity類,並移到一個Repository(調用此方法的類,用於保存會話的類,聽起來像是一個開始的地方。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.