簡體   English   中英

Hibernate模型類和輔助方法最佳實踐

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM