1

我想对我系统中的某个用户进行评论,该评论是由其他用户进行的。所以这是我的用户表:

用户表

这是我的 user_review 表:

用户评价表

EclipseLink 是这样生成的(实际上它@PrimaryJoinColumn@JoinColumn因为这篇文章而改变的):

    @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"

我真的不知道该怎么做,因为我已经尝试了很多事情,不同的关联,但似乎没有任何效果。有任何想法吗 ?

4

3 回答 3

1

这将是最奇怪的事情..但我只是删除了这一行:

//  @JoinColumn(name="id_user")

并且 Eclipse 不再担心.. (到目前为止 =] )我将保持这个线程打开,因为我真的认为这很奇怪发生并像这样解决。

更新

我按照布赖恩的指示做了,它似乎解决了我的问题:

@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
于 2013-03-06T23:08:15.390 回答
1

嗯 - 你的总结:

JPA中的多个可写映射?

与您的问题不符:

为什么我会收到此错误:无法在表“user_review”上解析连接列“user_id”?

所以我猜当您在字段中指定 a 时,您会遇到“多个可写...”@JoinColumn问题user@PrimaryKeyJoinColumn当您在user字段上指定 a 时,您会遇到“...无法解决...”问题。

@PrimaryKeyJoinColumn不能用于@ManyToOne映射。(当实体共享一个主键时,它可以用于@OneToOne映射。)因此,Eclipse 正在计算 JPA 规范定义的默认连接列名称(即"user_id"),并且由于该列不在您的user_review表上,您收到一条错误消息,指示无法在数据库表上解析该字段。

@JoinColumn你应该在你的user领域取消评论。这将产生两个@OneToMany映射,它们将确定要写入id_user数据库列的外键 - 它将采用字段引用或字段引用的主键的User值。这是不允许的。您需要重新处理数据库关系或对象模型,或者将其中一个映射标记为只读 ( )。userUserInfouserInfo@JoinColumn(name="id_user", insertable = false, updatable = false)

于 2013-03-07T23:57:53.333 回答
-1

代码与您发布的错误消息之间似乎存在不匹配。错误消息在您的代码中抱怨名为“user_id”的列,但是@JoinColumn 注释使用“id_user”。

这似乎不对,是不是你在某一时刻复制了异常然后更改了代码?

于 2013-03-06T11:22:27.583 回答