2012-10-28 116 views
3

有沒有什麼方法可以在hibernate中註釋實體的字符串以小寫字母?我的意思是比如Hibernate中的小寫註釋

@Entity 
public class User { 
    @Column 
    private String username; 
} 

我要休眠的用戶名在不依賴於特定數據庫的所有查詢爲小寫轉換。

回答

3

你可以寫您自己的UserType此字符串

public class LowerCaseString implements UserType 
{ 
    //.... 
     public void nullSafeSet(PreparedStatement preparedStatement, Object value, int index) 
      throws HibernateException, SQLException { 
     Hibernate.STRING.nullSafeSet(preparedStatement, 
       (value != null) ? ((String)value).toLowerCase() : null, index); 
     } 
    ///.... 
} 

您實體

@Entity 
public class User { 
    @Column 
    @Type(type="com.youcompany.LowerCaseString") 
    private String username; 
} 
4

可以,例如,使其在二傳手:

public void setUsername(String username) { 
    this.username = username.toLowerCase(); 
} 

或者使用interseptor:

public boolean onSave(Object entity,Serializable id, Object[] state,String[] propertyNames,Type[] types) throws CallbackException { 
    if (entity instanceof User){ 
     entity.username = usename.toLowerCase(); 
    } 
    return false; 
} 

你可以閱讀更多關於intercepters這裏: http://www.mkyong.com/hibernate/hibernate-interceptor-example-audit-log/