hibernate 自定义类型(地址)
2012-10-31 10:41
218 查看
自定义类型和动态组件都是在一张数据表(customer)里面操作的。
AddressType1.java:
package basicCar.bean; import java.io.Serializable; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import org.hibernate.HibernateException; import org.hibernate.usertype.UserType; public class AddressType1 implements UserType,Serializable{ private String province; private String city; private String street; private int number; private static final int[] SQL_TYPE={Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.INTEGER}; public AddressType1(){ System.out.println("constructor"); } public AddressType1(String province, String city, String street,int number){ this.province=province; this.city=city; this.street=street; this.number=number; } public Object assemble(Serializable arg0, Object arg1) throws HibernateException { return null; } public Object deepCopy(Object arg0) throws HibernateException { return null; } public Serializable disassemble(Object arg0) throws HibernateException { return null; } public boolean isMutable() { return false; } public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException { if(rs.wasNull()) return null; String province=rs.getString(names[0]); String city=rs.getString(names[1]); String street=rs.getString(names[2]); int number=rs.getInt(names[3]); AddressType1 address=new AddressType1(province, city, street,number); return address; } public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException { AddressType1 address=(AddressType1)value; if(value==null){ st.setNull(index, Types.VARCHAR); st.setNull(index+1, Types.VARCHAR); st.setNull(index+2, Types.VARCHAR); st.setNull(index+3, Types.INTEGER); } else{ st.setString(index, address.getProvince()); st.setString(index+1, address.getCity()); st.setString(index+2, address.getStreet()); st.setInt(index+3, address.getNumber()); } System.out.println("date has been saved"); } public Object replace(Object arg0, Object arg1, Object arg2) throws HibernateException { return null; } public Class returnedClass() { return AddressType1.class; } public int[] sqlTypes() { return SQL_TYPE; } public int hashCode(Object o){ AddressType1 address=(AddressType1)o; int result; result=10*address.province.hashCode()+11*address.city.hashCode()+address.street.hashCode()+9*address.number; return result; } public boolean equals(Object o1,Object o2){ if(o2==o1) return true; if(!(o1 instanceof AddressType1))return false; if(!(o2 instanceof AddressType1))return false; final AddressType1 add1=(AddressType1)o1; final AddressType1 add2=(AddressType1)o2; if(!add1.province.equals(add2.getProvince()))return false; if(!add1.city.equals(add2.getCity()))return false; if(!add1.street.equals(add2.getStreet()))return false; if(add1.number!=add2.number)return false; return true; } public String getProvince(){ return province; } public void setProvince(String s){ province=s; } public String getCity(){ return city; } public void setCity(String s){ city=s; } public String getStreet(){ return street; } public void setStreet(String s){ street=s; } public int getNumber(){ return number; } public void setnumber(int s){ number=s; } }
Customer.java:
private AddressType1 sAddress; //自定义值类型,地址(省、市、街、门牌号) //自定义值类型 public AddressType1 getSaddress() { return this.sAddress; } public void setSaddress(AddressType1 a) { this.sAddress = a; }
Customer.hbm.xml:
<!-- 自定义类型,关于地址 --> <property name="saddress" type="basicCar.bean.AddressType1"> <column name="province"/> <column name="city"/> <column name="street"/> <column name="number"/> </property>
Test.java:
void saveEntity() { //自定义值类型 AddressType1 address = new AddressType1("province1","city1","street1",1111); //Customer ss = new Customer(300,"小白","北京"); Customer ss = (Customer) session.load(Customer.class, new Long(300)); ss.setSaddress(address); session.save(ss); } void updateEntity() { //测试自定义类型 if(customer.getSaddress()!=null) { String province = customer.getSaddress().getProvince(); System.out.println("地址:" + province); } }
相关文章推荐
- 更方便的数据模式:Hibernate高级映射技术——自定义数据类型StringList
- Hibernate对自定义类型UserType的用法
- 【Hibernate】hibernate原生sql利用transformers返回多表自定义类型对象
- 【深入Hibernate】——根据业务自定义Clob数据类型
- Hibernate的自定义数据类型实现接口——UserType详解
- Hibernate自定义类型
- hibernate中自定义数据类型的使用---UserType,CompositeUserType接口的使用
- Hibernate的自定义数据类型实现接口——UserType详解
- Hibernate UserType 自定义类型
- hibernate 自定义数据类型(参考夏昕老师的《深入浅出Hibernate》)
- 使用Hibernate返回自定义类型时报错的问题
- Hibernate----自定义数据类型
- Hibernate的自定义数据类型实现接口之一——UserType祥解
- Hibernate注册自定义类型
- * hibernate3 自定义枚举映射类型
- Hibernate使用自定义类型UserType映射Oracle的Date类型
- Hibernate自定义类型取代Hibernate主件
- Hibernate对自定义类型CompositeUserType的用法
- hibernate 4 映射组件属性 自定义类型
- Hibernate自定义类型 集合字符串 存储