读书人

hibernate @oneToone 诠注

发布时间: 2012-12-19 14:13:15 作者: rapoo

hibernate @oneToone 注解
我这边有个User 表,还有个avatar表,avatar里面有个字段为userId,我现在要做one to one 的影射,在查询user 的时候把avatar 查询出来.但是avatar里面不能包含user对象,我要转化成json
[最优解释]
楼主的意思不就是要单向关联吗。在User中的getAvatar()上加
@OneToOne
@JoinColumn(name="User实体中的主键",referencedColumnName="userId")
[其他解释]
在User实体里面的getAvatar()方法上面加 @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY),Avatar不做关联就可以实现一对一单向关联
[其他解释]

引用:
在User实体里面的getAvatar()方法上面加 @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY),Avatar不做关联就可以实现一对一单向关联
这个不用mapby么
[其他解释]
引用:
楼主的意思不就是要单向关联吗。在User中的getAvatar()上加
@OneToOne
@JoinColumn(name="User实体中的主键",referencedColumnName="userId")
这样的话我的理解就是说user表中要有avatar这个字段,你这个是加在avatar还是user中的
[其他解释]
引用:
引用:
楼主的意思不就是要单向关联吗。在User中的getAvatar()上加
@OneToOne
@JoinColumn(name="User实体中的主键",referencedColumnName="userId")这样的话我的理解就是说user表中要有avatar这个字段,你这个是加在avatar还是user中的

user中不需要avatar的关联字段啊。因为你avatar表中已经有外间了。用的是你user的主键和avatar的外建进行关联。
@JoinColumn里面的name就是你当前表的主键,referencedColumnName用的就是你avatar表中的userId
这完全不矛盾
[其他解释]
我按照你的做了,它会自动更新user表,添加上一个avatar字段,但是在写unit test的时候查询出来的avatar为null.

引用:
引用:引用:
楼主的意思不就是要单向关联吗。在User中的getAvatar()上加……

[其他解释]
你实体类怎么写的
[其他解释]
引用:
你实体类怎么写的


private Integer id;
private String username;
private String email;
private String password;
private Integer joinStamp;
private Integer activityStamp;
private String accountType;
private boolean emailVerify;
private Integer joinIp;
private Avatar avatar;


@OneToOne
@JoinColumn(name="id",referencedColumnName="userId")
public Avatar getAvatar() {
return avatar;
}

[其他解释]
private Integer id;
private Integer hash;
private Integer userId;

@Column(name = "`userId`")
public Integer getUserId() {
return userId;
}

------其他解决方案--------------------


由于2B 公司的限制,字数过多就会被禁掉,很无奈,将就着看下吧
[其他解释]
这个从代码上已经没有问题了。你hibernate的关联策略会不会把大写改为_+小写
[其他解释]
如果怕关联错误的话,你就用“伪级联”,即:user 里边含有一个avatarID,但不设置任何关联,然后在前台转换为DTO对象(包含User的所有属性以及Avatar的所有属性),这样虽然步骤多了点,但是永远不会错。
[其他解释]

引用:
如果怕关联错误的话,你就用“伪级联”
表的结构不能改变的,而且数据库的引擎问题不支持外键,坑爹纠结!
[其他解释]
引用:
引用:如果怕关联错误的话,你就用“伪级联”表的结构不能改变的,而且数据库的引擎问题不支持外键,坑爹纠结!

我们项目经理基本上不用外键,清一色的都是伪级联,而且很少让实体类直接参与前台展示,一律用DTO对象,这样可以从根本上避免JSON的死循环。
[其他解释]
引用:
引用:引用:

我也是这么做的啊,只是我想在查询的时候把avatar查询出来,再去封装dto对象!
[其他解释]
引用:
引用:引用:引用:
我也是这么做的啊,只是我想在查询的时候把avatar查询出来,再去封装dto对象!

查询的时候查询只出ID,再去根据ID查询,然后再封装成DTO对象。是这样的吗?
[其他解释]
引用:
引用:引用:引用:引用:引用:不是,用级联查询直接查出avatar对象,然后再去转换成dto

如果没有外键,是无法级联查询的,所以就分两次查询吧!
[其他解释]
引用:
引用:引用:引用:引用:
不是,用级联查询直接查出avatar对象,然后再去转换成dto

读书人网 >J2EE开发

热点推荐