日期:2014-05-17  浏览次数:20662 次

hibernate 1对1 ,插入不进去数据
我现在实现两很张表:
public class TimesheetVOImpl {
private String timesheetId; // 主键

private String userId; // 用户id(和user表对应)
private Double foreCast; // 预计金额
   
  private User user;
}

public class User {
  private String userId; // 用户主键ID
private String userName;// 用户登陆名字
private String passWord;// 用户密码
   
  private TimesheetVOImpl timesheet;// 用户数据

}

<class name="com.home.entity.User" lazy="true" table="USER">
<id name="userId" column="UserId">
<generator class="uuid.hex" />
</id>
<property name="userName" column="UserName"/> 
<property name="passWord" column="PassWord"/> 
<one-to-one name="timesheet" 
class="com.home.timesheet.entity.TimesheetVOImpl"
lazy="false"
property-ref="user"/>
</class>

<class name="com.home.timesheet.entity.TimesheetVOImpl" lazy="true" table="TIMESHEET">
<id name="timesheetId" column="TimesheetId">
<generator class="uuid.hex" />
</id>
<property name="foreCast" column="ForeCast"/>
<many-to-one name="user"
class="com.home.entity.User"
column="UserId"
not-null="true" 
unique="true"
cascade="all"
lazy="false"
insert="true"
>
</many-to-one>
</class>


我想实现,添加user,同时添加timesheet,主键自动生成,userId 和user表对应,每次都只能生成user...
/**
* 添加用户
*/
public int addUser(User user){
Session session = super.getSessionFactory().getCurrentSession();
TimesheetVOImpl vo = new TimesheetVOImpl();
vo.setForeCast(0.00);
vo.setUser(user);
user.setTimesheet(vo);
session.save(user);
  }

------解决方案--------------------
我没坐过像你这样的需求,只坐过一个表一个表的插入~!
但我看到你
session.save(user);
这句话,这个我一般是用来想一个表中insert数据的,是不是还需要
session.save(TIMESHEET);呀?
------解决方案--------------------
再确认下CASCADE的设定
一般来说并不会直接新增
------解决方案--------------------
你的cascade都没有设置 cascade要设置成all 或者 sava-update才行