hibernate 自定义类型(地址)

自定义类型和动态组件都是在一张数据表(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);
		      }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值