我的数据库如下:tt_user和room:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tt_user]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[tt_user] GO
CREATE TABLE [dbo].[tt_user] ( [USER_ID] [int] IDENTITY (1, 1) NOT NULL , [NAME] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [ROOM_ID] [int] NULL , CONSTRAINT [PK_user] PRIMARY KEY CLUSTERED ( [USER_ID] ) ON [PRIMARY] , CONSTRAINT [FK_tt_user_room] FOREIGN KEY ( [ROOM_ID] ) REFERENCES [dbo].[room] ( [ROOM_ID] ) ) ON [PRIMARY] GO
|
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[room]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[room]
GO
CREATE TABLE [dbo].[room] (
[ROOM_ID] [int] IDENTITY (1, 1) NOT NULL ,
[ADDRESS] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
CONSTRAINT [PK_room] PRIMARY KEY CLUSTERED
(
[ROOM_ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
XML文件如下:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse - Hibernate Tools --> <hibernate-mapping> <class name="One_To_Many.Room" table="room" dynamic-update="true" dynamic-insert="true" schema="dbo" catalog="BlogOnline"> <id name="id" type="java.lang.Integer" > <column name="ROOM_ID" /> <generator class="native"/> </id> <property name="address" type="java.lang.String"> <column name="ADDRESS" length="50" /> </property> <set name="users" table="tt_USER" lazy="false" inverse="true" cascade="all"> <key column="ROOM_ID"/> <one-to-many class="One_To_Many.User"/> </set> </class> </hibernate-mapping>
|
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse - Hibernate Tools --> <hibernate-mapping> <class name="One_To_Many.User" table="tt_user" dynamic-update="false" dynamic-insert="false" schema="dbo" catalog="BlogOnline"> <id name="Id" type="java.lang.Integer" > <column name="USER_ID" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="50" /> </property> <many-to-one name="room" class="One_To_Many.Room" cascade="none" outer-join="auto" update="true" insert="true" access="property" column="ROOM_ID" not-null="true" /> </class> </hibernate-mapping>
|
Java代码如下:
package One_To_Many;
import java.util.HashSet; import java.util.Set;
public class Room { private long id; private String address; private Set users = new HashSet(); public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public long getId() { return id; } public void setId(long id) { this.id = id; } public Set getUsers() { return users; } public void setUsers(Set users) { this.users = users; }
}
|
package One_To_Many;
public class User { private long Id; private String name; private Room room;
public String getName() { return name; } public void setName(String name) { this.name = name; } public Room getRoom() { return room; } public void setRoom(Room room) { this.room = room; } public long getId() { return Id; } public void setId(long id) { Id = id; }
}
|
测试代码如下:
package One_To_Many;
import java.sql.SQLException;
import javax.security.auth.login.Configuration;
import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.Transaction;
import test.HibernateSessionFactory;
public class Test { public static void main(String[] args) throws HibernateException, SQLException {
Session session = HibernateSessionFactory.getSession(); session.connection().setAutoCommit(true); Room room = new Room(); room.setAddress("China-10-911"); User user1 = new User(); user1.setName("ivan"); User user2 = new User(); user2.setName("mada");
user1.setRoom(room); user2.setRoom(room); room.getUsers().add(user1); room.getUsers().add(user2); Transaction tx= (Transaction) session.beginTransaction(); session.save(room); tx.commit(); session.close(); System.out.println("transaction ends"); } }
|
出现的错误如下:
Exception in thread "main" org.hibernate.HibernateException: identifier of an instance of One_To_Many.Room was altered from 9 to 9 at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:51) at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:150) at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:106) at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:195) at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at One_To_Many.Test.main(Test.java:45)
|
其中,我测试一次,from to 就增加一,我测试了九次,所以九有from 9 to 9!我刚学习hibernate不久,恳求banq和各位帮助一下,不胜感谢!