繁体   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