首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JoinTable

使用JoinTable
EN

Stack Overflow用户
提问于 2012-01-05 15:08:47
回答 1查看 1.6K关注 0票数 2

我正在尝试使用Java2EE做一个类似twitter的项目,下面是数据库的一个简单视图。

提到,追随者和以下是三个JoinTable。(请注意,前面提到的、跟随者、跟随者和每个用户字段都有User.username作为外键。)对于第一个问题,我遇到了一个问题,这会导致我的部署在这个例外情况下失败:

异常描述:映射在元素字段上的引用列名用户名与映射引用上的有效字段不对应。

这是这两个实体的映射。

推特:

代码语言:javascript
复制
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;

用户:

代码语言:javascript
复制
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;

我的地图怎么了?有人能帮我找到解决办法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-01-05 16:12:21

我认为你必须改变

代码语言:javascript
复制
@JoinColumn(name = "mentioned", referencedColumnName = "username")

指定用户表

代码语言:javascript
复制
@JoinColumn(name = "mentioned", referencedColumnName = "user")

基本上,这条消息是说您的tweet表没有外键字段username,它不像您所称的那样是user

这个-> private Collection<Tweet> mentions;也应该是一对多的用户集合,留给您的是

代码语言:javascript
复制
@OneToMany
@JoinTable(
    name = "Mention", 
    joinColumns = {
        @JoinColumn(name = "tweet", referencedColumnName = "id")
    }, 
    inverseJoinColumns = {
        @JoinColumn(name = "mentioned", referencedColumnName = "user")
    }
)    
private Collection<User> mentions;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8744715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档