hibernate基础之查询--一对多关联关系的映射

今天 在做一对多关联关系的映射的时候有一个employee对象怎么都差不进去,后来发现是数据库设计时,字段长度为10,而我设置名字(employee.name)是bill_gates2,刚好大于10,所以有以下异常:

Exception in thread "main" org.hibernate.exception.DataException: could not insert: [com.messi.hibernate.domain.Employee]
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:77)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
    at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
    at com.messi.hibernate.test.Many2one.add(Many2one.java:37)
    at com.messi.hibernate.test.Many2one.main(Many2one.java:12)
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'name' at row 1
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3595)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2625)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2415)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2333)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2318)
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
    ... 17 more


下面是一对多,多对一的测试类

package com.messi.hibernate.test;

import org.hibernate.Session;
import org.hibernate.Transaction;
import com.messi.hibernate.domain.Department;
import com.messi.hibernate.domain.Employee;
import com.messi.hibernate.utils.HibernateUtils;

public class Many2one {

	public static void main(String[] args) {
		add();
       query(2);
       queryDepart(1);

	}

    static Department add() {
		Session s = null;
		Transaction tx=null;
		try {
			Department dpt=new Department();
			dpt.setName("ibm");
			
			Employee em=new Employee();
			em.setDepart(dpt);
			em.setName("bill_gates");
			
			Employee em2=new Employee();
			em2.setDepart(dpt);
			em2.setName("扎克伯格");

			s = HibernateUtils.getSession();
			tx=s.beginTransaction();
			s.save(dpt);
			s.save(em);
			s.save(em2);
			tx.commit();
		} finally {
			if (s != null) {
				s.close();
			}
		}
		return null;

	}
    
    

	static Employee query(int empid){
    	Session s=null;
    	Transaction tx=null;
        try {
        	s=HibernateUtils.getSession();
        	tx=s.beginTransaction();
			Employee e=(Employee) s.get(Employee.class,empid);
			System.out.println("department name:"+e.getDepart().getName());
			tx.commit();
			return e;
		}finally{
			if(s!=null){
				s.close();
			}
		}
    	
    }
	
	static Department queryDepart(int deptid){
    	Session s=null;
    	Transaction tx=null;
        try {
        	s=HibernateUtils.getSession();
        	tx=s.beginTransaction();
        	Department dp=(Department) s.get(Department.class,deptid);
			System.out.println("employee size:"+dp.getEmp().size());
			tx.commit();
			return dp;
		}finally{
			if(s!=null){
				s.close();
			}
		}
    	
    }

}
下面是配置文件:Employee.hbm.xml

<?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.messi.hibernate.domain">
    <class name="Employee">
        <id name="id" type="integer">
            <generator class="native"></generator>
        </id>
        <property name="name" length="10" not-null="true"></property>
        <many-to-one name="depart" column="depart_id"></many-to-one>
    </class>
</hibernate-mapping>

下面是Department.hbm.xml:

<?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.messi.hibernate.domain">
    <class name="Department">
        <id name="id" type="integer">
            <generator class="native"></generator>
        </id>
        <property name="name" length="10" not-null="true"></property>
        <set name="emp">
        <key column="depart_id"></key>
        <one-to-many class="Employee"/>
        </set>

    </class>
</hibernate-mapping>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值