hibernate @oneToone 注解 我这边有个User 表,还有个avatar表,avatar里面有个字段为userId,我现在要做one to one 的影射,在查询user 的时候把avatar 查询出来.但是avatar里面不能包含user对象,我要转化成json 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在User实体里面的getAvatar()方法上面加 @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY),Avatar不做关联就可以实现一对一单向关联 楼主的意思不就是要单向关联吗。在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. 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; } 这个从代码上已经没有问题了。你hibernate的关联策略会不会把大写改为_+小写 如果怕关联错误的话,你就用“伪级联”,即:user 里边含有一个avatarID,但不设置任何关联,然后在前台转换为DTO对象(包含User的所有属性以及Avatar的所有属性),这样虽然步骤多了点,但是永远不会错。 我们项目经理基本上不用外键,清一色的都是伪级联,而且很少让实体类直接参与前台展示,一律用DTO对象,这样可以从根本上避免JSON的死循环。 我也是这么做的啊,只是我想在查询的时候把avatar查询出来,再去封装dto对象! 查询的时候查询只出ID,再去根据ID查询,然后再封装成DTO对象。是这样的吗? 不是,用级联查询直接查出avatar对象,然后再去转换成dto JPA分页的问题?感觉效率不行 关于使用hibernate,高分!! 用相同路径的类替换jar包中的类问题 js如何设计可以让错误信息变为可修改的 java 调用数据库内容时 无法显示对应数据..请帮忙.谢谢了 The requested resource (/gest/) is not available的问题 约会去了,很开心,散分:) 谁有Resin配置Struts开发环境的经验 没有源文件还能编译 springboot整合mybatis-plus找不到mapper文件 配置spring监听的时候,出现了问题。 求一个struts2 hibernate分页的例子
@OneToOne
@JoinColumn(name="User实体中的主键",referencedColumnName="userId")
@JoinColumn里面的name就是你当前表的主键,referencedColumnName用的就是你avatar表中的userId
这完全不矛盾
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 hash;
private Integer userId; @Column(name = "`userId`")
public Integer getUserId() {
return userId;
}