hibernate @any

本文介绍了一个使用Hibernate框架的示例,展示了如何利用Any注解实现不同类型对象之间的关联存储。通过具体的Java代码实现了Person、Company与Vehicle三个实体类间的关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值