码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate操作没有主键数据表

时间:2015-01-22 11:17:53      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:hibernate

在数据库中中间表往往可能没有主键,而Hibernate检索的时候是根据主键检索的,这样就无法直接检索中间表中的数据。对于这种情况Hibernate会自动生成一个主键辅助类来辅助检索,下面看具体使用方法。

数据库存在数据表region表存有两个字段,一个city字段,一个code字段,city字段存放城市名,code字段存放城市代码。没有指定主键。

这是使用Hibernate的反向工程自动创建POJO类和映射关系。同时会自动生成一个辅助类。

首先看一下POJO类。

public class RegionId implements java.io.Serializable {

	// Fields

	private String city;
	private String eamcode;

	// Constructors

	/** default constructor */
	public RegionId() {
	}

	/** full constructor */
	public RegionId(String city, String eamcode) {
		this.city = city;
		this.eamcode = eamcode;
	}

	// Property accessors

	public String getCity() {
		return this.city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public String getEamcode() {
		return this.eamcode;
	}

	public void setEamcode(String eamcode) {
		this.eamcode = eamcode;
	}

}
然后看他的辅助类

public class Region implements java.io.Serializable {

	// Fields

	private RegionId id;

	// Constructors

	/** default constructor */
	public Region() {
	}

	/** full constructor */
	public Region(RegionId id) {
		this.id = id;
	}

	// Property accessors

	public RegionId getId() {
		return this.id;
	}

	public void setId(RegionId id) {
		this.id = id;
	}

}
我们可以看到这个辅助类中只有一个RegionId类型的成员id。

下面看一下他的映射关系。

<hibernate-mapping>
    <class name=Region" table="region" schema="dbo">
        <composite-id name="id" class="RegionId">
            <key-property name="city" type="java.lang.String">
                <column name="city" length="20" />
            </key-property>
            <key-property name="eamcode" type="java.lang.String">
                <column name="eamcode" length="20" />
            </key-property>
        </composite-id>
    </class>
</hibernate-mapping>
上述类和映射文件都是Hibernate反向工程自动生成的。

下面看一下如何操作数据表,这里已查询为例:

public List findByProperty(String propertyName, Object value) {
		try {
			String queryString = "from Region as model where model."
					+ propertyName + "= ?";
			Query queryObject = getSession().createQuery(queryString);
			queryObject.setParameter(0, value);
			return queryObject.list();
		} catch (RuntimeException re) {
			throw re;
		}
	}
然后看测试类

public static void main(String[] args) {
		RegionDAO df = new RegionDAO();
		List list = df.findByProperty("id.city", "3701");
		Region u = (Region) list.get(0);
		System.out.println(u.getId().getcode());
	}
这里要注意的是操作的一直是Hibernate生成的辅助类,但是在传数据时还有获取数据时都是从Region类的Id中获取指定的RegionId。





Hibernate操作没有主键数据表

标签:hibernate

原文地址:http://blog.csdn.net/u011740475/article/details/43014923

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!