Hibernate 使用Event Listener 实现createDate和modifiedDate自动生成

作者:Rui 发布时间:August 18, 2016 分类:JAVA,Hibernate 浏览:636

程序中我们经常会需要实现记录实体的创建时间和修改时间,如果我们使用Hibernate JPA的API,可以借助注解@PrePersist和@PreUpdate来实现,但是使用Hibernate 经典的session的API这些是不起作用的,但Hibernate提供Event Listener的方式可以供我们来添加Hibernate保存,更新,删除的监听,我们可以利用PRE_INSERT和PRE_UPDATE来实现该需求。

使用JPA注解实现代码示例:

@PrePersist
public void onSave() {
    this.createDate = new Date();
    this.modifiedDate = new Date();
}

@PreUpdate
public void onUpdate() {
    this.modifiedDate = new Date();
}

阅读剩余部分...

Hibernate Mapping nvarchar for SQLServer 2008 and 2005

作者:Rui 发布时间:February 1, 2016 分类:JAVA,Hibernate 浏览:687

nvarchar 存储统一的Unicode字节码,存储中文不会出现乱码情况。
Hibernate 默认将String类型的属性映射成varchar类型。

下面的代码将演示怎么将Hibernate 默认映射改为nvarchar

public class SQLServerUnicodeDialect extends org.hibernate.dialect.SQLServerDialect {
    public SQLServerUnicodeDialect() {
        super();
        registerColumnType(Types.CHAR, "nchar(1)");
        registerColumnType(Types.LONGVARCHAR, "nvarchar(max)" );
        registerColumnType(Types.VARCHAR, 4000, "nvarchar($l)");
        registerColumnType(Types.VARCHAR, "nvarchar(max)");
        registerColumnType(Types.CLOB, "nvarchar(max)" );

        registerColumnType(Types.NCHAR, "nchar(1)");
        registerColumnType(Types.LONGNVARCHAR, "nvarchar(max)");
        registerColumnType(Types.NVARCHAR, 4000, "nvarchar($l)");
        registerColumnType(Types.NVARCHAR, "nvarchar(max)");
        registerColumnType(Types.NCLOB, "nvarchar(max)");

        registerHibernateType(Types.NCHAR, StandardBasicTypes.CHARACTER.getName());
        registerHibernateType(Types.LONGNVARCHAR, StandardBasicTypes.TEXT.getName());
        registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName());
        registerHibernateType(Types.NCLOB, StandardBasicTypes.CLOB.getName() );
    }
}

Hibernate JPA 联合主键

作者:Rui 发布时间:September 9, 2015 分类:JAVA,Hibernate 浏览:537

两个或多个字段组成的主键,我们叫联合主键,在JPA中定义联合主键需要单独定义一个主键类来表示联合主键。

下面是定义一个主键类:

public class UserRolePk implements Serializable {
    public User user;
 
    public Role role;
 
    public UserRolePk() {}
 
    public int hashCode() {
        return (this.user.id + "_" + this.role.id).hashCode();
    }
 
    public boolean equals(UserRolePk userRolePk) {
        return this.user.equals(userRolePk.user) && this.role.equals(userRolePk.role);
    }
}

阅读剩余部分...