hibernate 单向关联保存多方是外键为null

尽管叫我疯子_ 2014-02-02 09:02:34
问题描述:user 和 purview 是单向关联的多对一关系, 其中 user是一方,purview是多方,当我在插入多方数据时, 外键(user_id)为null




实体类:


/*
* 系统用户数据模型
*/
public class User {

private int user_id;
private String username;
private String password;
private int sex; //1:男 ;0:女
private int age;
private int identity; //身份 --1:管理员;2:学生;3:教师


/*省略setter getter 方法 */
}







/*
*用户权限数据模型
*/
public class Purview {
private int pid;
private User user;
private String pname;
private String obj;//操作对象:数据库中的表
private int type; //操作类型,增删改查依次为:1,2,3,4




/*省略setter getter 方法*/

}



配置文件:

<hibernate-mapping>

<class name="bean.User" table="bcw_user">
<id name="user_id" column="user_id">
<generator class="sequence">
<param name="sequence" >bcw_user_seq</param>
</generator>
</id>

<property name="username" type="string"/>
<property name="password" type="string"></property>
<property name="sex" ></property>
<property name="age" />
<property name="identity" ></property>

</class>

</hibernate-mapping>



<hibernate-mapping>

<class name="bean.Purview" table="bcw_purview">
<id name="pid" column="p_id">
<generator class="sequence">
<param name="sequence" >bcw_purview_seq</param>
</generator>
</id>


<property name="obj" type="string"/>
<property name="pname" type="string"></property>
<property name="type" ></property>

<many-to-one name="user" fetch="select" column="user_id" class="bean.User" outer-join="true"/>

</class>

</hibernate-mapping>



测试代码:


public static void main(String[] d) {
HibernateUtil util = new HibernateUtil();
Session session = util.getSession();
Transaction tx = session.beginTransaction();
User user = (User) session.get(User.class, 21);
//System.out.println(user+"\t"+user.getUser_id());
Purview p = new Purview();

p.setObj("bcw_source");
p.setPname("add source");
p.setType(1);
p.setUser(user);session.saveOrUpdate(p);
tx.commit();

}


要保存的purview 中的 user 对象是从数据库中取出然后set到purview对象中的,purview对象存入数据库操作是成功的, 但外键为空,无法成功插入。




控制台显示为:

Hibernate: select user0_.user_id as user1_0_0_, user0_.username as username0_0_, user0_.password as password0_0_, user0_.sex as sex0_0_, user0_.age as age0_0_, user0_.identity as identity0_0_ from bcw_user user0_ where user0_.user_id=?
Hibernate: select bcw_purview_seq.nextval from dual
Hibernate: insert into bcw_purview (obj, pname, type, user_id, p_id) values (?, ?, ?, ?, ?)



百度了很久没有解决, 希望各位大神不吝赐教
...全文
184 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
残梦破 2014-02-03
  • 打赏
  • 举报
回复
你这个缺东西,在User类里面需要写private Set<Purview> purview; get,set方法 然后在User配置文件中写<Set> 而且你这个多方怎么没有外键值
  • 打赏
  • 举报
回复
引用 1 楼 u010176900 的回复:
你这个缺东西,在User类里面需要写private Set<Purview> purview; get,set方法 然后在User配置文件中写<Set> 而且你这个多方怎么没有外键值
我这个是单向关联,在题目里说了, 只在多的一方保存一方的对象, 我百度了很多资料,很多博客里面也是跟我这个一样一样配置的, 但是我这个外键就是为空,多方的外键就是 user_id, 那个在控制台语句应该可以看到哦,

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧