hibernate @any

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

}



猜你喜欢

转载自flyfx.iteye.com/blog/2199614