我想对我系统中的某些用户进行审核,此评论由其他用户制作。所以这是我的用户表:
这是我的user_review表:
EclipseLink正在生成这样的内容(实际上@PrimaryJoinColumn
@JoinColumn
的内容因post而改变了 @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Temporal(TemporalType.DATE)
private Date date;
private String review;
//bi-directional many-to-one association to User
// @PrimaryKeyJoinColumn(name="id_user_reviewer")
@ManyToOne
@JoinColumn(name="id_user_reviewer")
private User reviewer;
//bi-directional many-to-one association to User
// @JoinColumn(name="id_user")
@ManyToOne
@PrimaryKeyJoinColumn(name="id_user")
private User user;
//bi-directional many-to-one association to UserInfo
@ManyToOne
@JoinColumn(name="id_user")
private UserInfo userInfo;
}:
Join column "user_id" cannot be resolved on table "user_review"
并一直给我这个错误:
{{1}}
我真的不该做什么'因为我已经尝试了很多东西,不同的联想,但似乎没有任何工作。有什么想法吗?
答案 0 :(得分:1)
嗯 - 你的总结:
JPA中的多个可写映射?
与您的问题似乎不匹配:
为什么会出现此错误:无法在表“user_review”上解析加入列“user_id”?
因此,当您在@JoinColumn
字段中指定user
时,我猜您会遇到“多个可写...”问题;如果在@PrimaryKeyJoinColumn
字段中指定user
,则会出现“...无法解决...”问题。
@PrimaryKeyJoinColumn
无法用于@ManyToOne
映射。 (当实体共享主键时,它可用于@OneToOne
映射。)因此,Eclipse正在计算JPA规范("user_id"
)定义的默认连接列名称,并且由于该列不在您的user_review
表中,因此会收到一条错误消息,指出无法在数据库表上解析该字段。
您应取消评论@JoinColumn
字段中的user
。这导致两个@OneToMany
映射将确定要写入数据库上id_user
列的外键 - 它将采用由User
引用的主键的值。 user
字段或UserInfo
字段引用的userInfo
字段。这是不允许的。您需要重新编写数据库关系或对象模型,或者将其中一个映射标记为只读(@JoinColumn(name="id_user", insertable = false, updatable = false)
)。
答案 1 :(得分:0)
这将是最奇怪的事情..但我只是删除该行:
// @JoinColumn(name="id_user")
Eclipse不再警告..(到目前为止=)) 我将保持这个线程开放'因为我真的认为这是非常奇怪的发生并且这样解决。
<强>更新强>
我按照Brian的指示做了,似乎解决了我的问题:
@Entity
@Table(name="user_review")
public class UserReview implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private Integer id;
@Temporal(TemporalType.DATE)
private Date date;
private String review;
//bi-directional many-to-one association to User
@ManyToOne
@JoinColumn(name="id_user_reviewer", insertable=false, updatable=false)
private User user1;
//bi-directional many-to-one association to User
@ManyToOne
@JoinColumn(name="id_user")
private User user2;
//bi-directional many-to-one association to UserInfo
@ManyToOne
@JoinColumn(name="id_user", insertable=false, updatable=false)
private UserInfo userInfo;
.. more code
答案 2 :(得分:-1)
看起来代码与您发布的错误消息之间存在不匹配。 错误消息是在您的代码中抱怨名为“user_id”的列,但@JoinColumn注释使用“id_user”。
这似乎不对,可能是您在某一点复制了异常然后更改了代码?