copy from
http://my.oschina.net/longyuan/blog/337635?p={{page}}#OSC_h3_3
http://www.iteye.com/topic/8900
http://my.oschina.net/longyuan/blog/337635?p={{page}}#OSC_h3_3
http://www.iteye.com/topic/8900
package com.bjsxt.hibernate.any;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Person {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.bjsxt.hibernate.any;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Company {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.bjsxt.hibernate.any;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import org.hibernate.annotations.Any;
import org.hibernate.annotations.AnyMetaDef;
import org.hibernate.annotations.MetaValue;
@Entity
public class Vehicle {
private int id;
private String name;
private Object ownObject;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Any(metaColumn = @Column(name = "owner_type", length = 3), fetch = FetchType.LAZY)
@AnyMetaDef(idType = "int", metaType = "string", metaValues = {
@MetaValue(targetEntity = com.bjsxt.hibernate.any.Person.class, value = "1"),
@MetaValue(targetEntity = com.bjsxt.hibernate.any.Company.class, value = "2") })
@JoinColumn(name = "owner_id")
public Object getOwnObject() {
return ownObject;
}
public void setOwnObject(Object ownObject) {
this.ownObject = ownObject;
}
}
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import com.bjsxt.hibernate.any.Company;
import com.bjsxt.hibernate.any.Person;
import com.bjsxt.hibernate.any.Vehicle;
public class TestAny {
/**
* @param args
*/
public static void main(String[] args) {
Configuration cfg = new AnnotationConfiguration();
SessionFactory sf = cfg.configure().buildSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
Person p = new Person();
p.setId(1);
p.setName("1111111");
Vehicle v = (Vehicle) session.load(Vehicle.class, 2);
//Person pe = (Person) v.getOwnObject();
//System.out.println("p:" + pe.getId() + "name:" + pe.getName());
Company c = (Company) v.getOwnObject();
System.out.println("c:" + c.getId() + "name:" + c.getName());
session.getTransaction().commit();
session.close();
sf.close();
System.out.println("------------------end---------------------");
}
}