表结构create table ITEM
(
ITEM_ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(200),
DESCRIPTION VARCHAR(200)
);create table shipment
(
shipment_id int primary key auto_increment,
state varchar(200)
);creata table item_shipment
(
item_id int,
item_shipment int
);

解决方案 »

  1.   

    把id Set进去是不行的,需要把对象load出来再操作
      

  2.   

    你好,我改成这样了,还是提示Session session = getSession();


    Shipment shipment = new Shipment();
    shipment.setState("123");

    Item item = (Item)session.load(Item.class, Integer.valueOf(20));
    item.setName("123123");
    shipment.setItem(item);


    session.beginTransaction();

    session.saveOrUpdate(shipment);

    session.getTransaction().commit();

    closeSession();
    Hibernate: select item0_.id as id2_0_, item0_.name as name2_0_ from test.item item0_ where item0_.id=?
    Hibernate: insert into test.shipment (state) values (?)
    Hibernate: insert into item_shipment (item_id, shipment_id) values (?, ?)
    Exception in thread "main" org.hibernate.exception.ConstraintViolationException: could not insert: [cn.limaoyuan.po2.Shipment]
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2267)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2640)
    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.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
    at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
    at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
    at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
    at cn.limaoyuan.test.Main2.save(Main2.java:29)
    at cn.limaoyuan.test.Main2.main(Main2.java:13)
    Caused by: java.sql.SQLException: Duplicate key or integrity constraint violation message from server: "Duplicate entry '20' for key 1"
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2001)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1168)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1279)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2281)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1825)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1667)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2250)
    ... 15 more