hibernate(九)之多个字段唯一设置

1.解释:即主键唯一理所当然,当时表存在另外几个字段合起来唯一的条件,如学科表中年级和学科名必须合起来唯一

2.代码上基本上和一对一里面实例差不多,改的就是配置文件和测试代码,还有给实体bean增加了age字段

3.实体bean

package com.sinoi.domain;

public class Person {
 private int id;
 private String name;
 private IdCard idCard;
 private int age;
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 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;
 }
 public IdCard getIdCard() {
  return idCard;
 }
 public void setIdCard(IdCard idCard) {
  this.idCard = idCard;
 }
 
}

配置文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.sinoi.domain">

    <class name="Person" table="hib_person">
        <id name="id" column="PERSON_ID">
            <generator class="native"/>
        </id>
        <property name="name" unique-key="unique_key_id"/>
        <property name="age" unique-key="unique_key_id"/>
        <one-to-one name="idCard"></one-to-one>
    </class>

</hibernate-mapping>

4.测试代码

package unit.test;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.junit.Test;

import com.sinoi.domain.IdCard;
import com.sinoi.domain.Person;
import com.sinoi.util.HibernateUtil;


public class UnitTest {
	@Test
	public void save() {
		Session session = HibernateUtil.getSession();
		session.beginTransaction();
		
		Person person1 = new Person();
		person1.setName("beanGou1");
		person1.setAge(12);
		Person person2 = new Person();
		person2.setName("beanGou2");
		person2.setAge(12);
		
		IdCard card = new IdCard();
		card.setIdNum("abcde");
		card.setPerson(person1);
		
		session.persist(card);
		session.persist(person1);
		session.persist(person2);
		
		session.getTransaction().commit();
		
	}
	
	//´Ó ´Ó¶ÔÏó²éѯ
	@Test
	public void load() {
		Session session = HibernateUtil.getSession();
		IdCard card = (IdCard) session.load(IdCard.class, 1);
		Hibernate.initialize(card);
		session.close();
		System.out.println("card no " + card.getIdNum());
//		System.out.println("person name " + card.getPerson().getName());
	}
	
	//´Ó ´Ó¶ÔÏó²éѯ
	@Test
	public void query1() {
		Session session = HibernateUtil.getSession();
		IdCard card = (IdCard) session.get(IdCard.class, 1);
		System.out.println("card no " + card.getIdNum());
		System.out.println("person name " + card.getPerson().getName());
	}
	
	//´Ó Ö÷¶ÔÏó²éѯ
	@Test
	public void query2() {
		Session session = HibernateUtil.getSession();
		Person person = (Person) session.get(Person.class, 1);
		System.out.println("person name " + person.getName());
		System.out.println("card no " + person.getIdCard().getIdNum());
	}
	
}

即执行插入操作,就不能插入姓名和年龄都相同的对象

 

转载于:https://my.oschina.net/beanGo/blog/172940

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值