2

我正在尝试使用 Java2EE 做一个类似 twitter 的项目,这是数据库的简单视图。
Mention、Followers 和 Followers 是三个 JoinTable。(请注意,提到的,follower,following 和每个用户字段都有 User.username 作为外键。)我遇到了第一个问题,这导致我的部署失败并出现以下异常:

异常描述:映射到元素 [字段提及] 上的参考列名称 [用户名] 与映射参考上的有效字段不对应。

这是两个实体的映射。

鸣叫:

public class Tweet implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @NotNull
    @Column(name = "id", nullable = false)
    private Integer id;

    ...

    @JoinColumn(name = "user", referencedColumnName = "username")
    @ManyToOne
    User user;
    @JoinTable(name = "Mention", joinColumns = {
        @JoinColumn(name = "tweet", referencedColumnName = "id")}, inverseJoinColumns = {
        @JoinColumn(name = "mentioned", referencedColumnName = "username")})
    @OneToMany
    private Collection<Tweet> mentions;

用户:

public class User implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "username", nullable = false, length = 50)

    ...

    @OneToMany(mappedBy = "user")
    Collection<Tweet> tweets;
    @JoinTable(name = "Following", joinColumns = {
        @JoinColumn(name = "user", referencedColumnName = "username")}, inverseJoinColumns = {
        @JoinColumn(name = "following", referencedColumnName = "username")})
    @OneToMany
    Collection<User> following;
    @JoinTable(name = "Followers", joinColumns = {
        @JoinColumn(name = "user", referencedColumnName = "username")}, inverseJoinColumns = {
        @JoinColumn(name = "follower", referencedColumnName = "username")})
    @OneToMany
    Collection<User> followers;
    @OneToMany(mappedBy = "mentions")
    Collection<Tweet> mentioning;

我的映射有什么问题?有人可以指出我的解决方案吗?

4

1 回答 1

0

我认为你必须改变

@JoinColumn(name = "mentioned", referencedColumnName = "username")

指定用户表

@JoinColumn(name = "mentioned", referencedColumnName = "user")

基本上,消息是说您的tweet表没有外键字段username,正如您所说的那样user

这 ->private Collection<Tweet> mentions;也应该是一对多的用户集合,让您拥有

@OneToMany
@JoinTable(
    name = "Mention", 
    joinColumns = {
        @JoinColumn(name = "tweet", referencedColumnName = "id")
    }, 
    inverseJoinColumns = {
        @JoinColumn(name = "mentioned", referencedColumnName = "user")
    }
)    
private Collection<User> mentions;
于 2012-01-05T16:12:21.353 回答