您的位置:首页 > 其它

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: