最近用hibernate操作数据库,出现了很纠结的问题,没办法,最后使用了原生态sql解决,就是取connection,自己写语句实现,好了,现在开始描述问题!
两张表,userinfo userinfo1,两个表都有一个username字段,而且都是主键,设置了一对一关联关系,数据库这边没问题,使用sql语句都能执行。
hibernate这边映射的**.hbm.xml文件中的两个表是这样的
  <class name="com.virus.bean.UserInfo" table="userInfo" schema="dbo" catalog="BBS">
        <id name="username" type="java.lang.String">
            <column name="username" length="20" />
            <generator class="assigned" />
        </id>
        <one-to-one name="userinfo1" class="com.virus.bean.UserInfo1" cascade="all"/>
        <property name="password" type="java.lang.String">
            <column name="password" length="20" not-null="true" />这个是userinfo表的
<class name="com.virus.bean.UserInfo1" table="UserInfo1" schema="dbo" catalog="BBS">
        <id name="username" type="java.lang.String">
            <column name="username" length="20" />
            <generator class="native" />
        </id>
        <one-to-one name="userInfo" class="com.virus.bean.UserInfo" />
        <property name="userlevel" type="java.lang.String">
            <column name="userlevel" length="10" />
        </property>这个是userinfo1表的。
我查询的时候没问题的,就是用hibernate取提取userinfo里面的数据的时候,userinfo1里面对应的数据都能出来。
但是插入的时候就出毛病了,因为我的这个是个web项目,userinfo的数据是通过struts的DTO对象实现的,而userinfo1的对象是我自己new出来的,这时候问题就出来了,我使用userinfo.setUserInfo1(userinfo1),userinfo1.setUserInfo(userinfo),这样设置过之后,执行save就提示我:ids for this class must be manually assigned before calling save():userinfo1, 我很纳闷,经过我测试,是这个userinfo1里面的username为空导致的,问题是找到了,可是没法解决的,因为我的这个userinfo1是手动new出来的,所以就为空,不知道该怎么解决了!  大家是不是迷糊了啊!
贴代码public class Uregedit extends ActionSupport {
private UserInfo users;


public UserInfo getUsers() {
return users;
} public void setUsers(UserInfo users) {
this.users = users;
} @Override
public String execute(){
System.out.println(users.getUsername());
System.out.println(users.getPassword());
System.out.println(users.getPid());
System.out.println(users.getSex());//上面的数据都能出来
UserInfo1 ui1=new UserInfo1();
ui1.setUserInfo(users);
users.setUserinfo1(ui1);//一对一关联写法
RegeditUser ru=new RegeditUser();
ru.save(users);
ServletActionContext.getRequest().getSession().setAttribute("user", users);
return SUCCESS;
}
}
希望有人能提供更好的解决方法!