tôi quyết định thực hiện một loại người dùng ... đó là càng gần đến một cấu hình hibernate như tôi có thể nhận được ... đây là mã ...
package model;
import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.usertype.UserType;
public class UpperCaseUserType implements UserType {
private static final int[] TYPES = {Types.VARCHAR};
public int[] sqlTypes() {
return TYPES;
}
public Class returnedClass() {
return String.class;
}
public boolean equals(Object x, Object y) throws HibernateException {
if (x == y) {
return true;
}
if (null == x || null == y) {
return false;
}
return new EqualsBuilder().append(x, y).isEquals();
}
public int hashCode(Object o) throws HibernateException {
return new HashCodeBuilder().append(o).toHashCode();
}
public Object nullSafeGet(ResultSet resultSet, String[] strings, Object object) throws HibernateException, SQLException {
return ((String) Hibernate.STRING.nullSafeGet(resultSet, strings[0])).toUpperCase();
}
public void nullSafeSet(PreparedStatement preparedStatement, Object object, int i) throws HibernateException, SQLException {
String string = ((String) object).toUpperCase();
Hibernate.STRING.nullSafeSet(preparedStatement, string, i);
}
public Object deepCopy(Object o) throws HibernateException {
if (null == o) {
return null;
}
return new String(o.toString());
}
public boolean isMutable() {
return false;
}
public Serializable disassemble(Object o) throws HibernateException {
return (String) o;
}
public Object assemble(Serializable serializable, Object o) throws HibernateException {
return serializable;
}
public Object replace(Object o, Object arg1, Object arg2) throws HibernateException {
return o;
}
}
xem xét yếu tố khách sạn này
<property name="serialNumber" type="model.UpperCaseUserType">
<column name="SERIAL_NUMBER" length="20" not-null="true" unique="true" />
</property>
Vì vậy, lý do ... Như hibernate chèn dữ liệu, loại này sẽ chuyển đổi chuỗi thành chữ hoa. Khi hibernate chọn dữ liệu, điều tương tự cũng xảy ra. Ưu điểm của lớp này chỉ thay đổi việc lấy/thiết lập của bean thành chữ hoa là khi tôi sử dụng một tiêu chí để chọn trên serialNumber. Hibernate cũng sẽ viết hoa tham số của tôi vì nó sẽ truyền/áp dụng cùng loại như được định nghĩa trong cấu hình bảng.
Vì vậy, tôi không cần phải nhớ viết hoa tất cả các tiêu chí tìm kiếm của tôi cho số sê-ri ... hibernate chăm sóc điều đó cho tôi ... đó là chính xác những gì tôi đang cố gắng đạt được ở đây!
Tôi có một JUnit thể hiện tất cả các công cụ này, nhưng tôi nghĩ rằng câu trả lời của tôi là quá lớn vì nó là ...
Nguồn
2010-03-10 16:29:09
Tôi có một đánh chặn chứa khác "công cụ" mà tôi có thể thả ý tưởng của bạn vào ... nhưng tôi không thấy viết một lô nếu logic cho hàng chục lớp hay như vậy cần một số lĩnh vực của họ để được viết hoa. –