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---------------------"); } }