0

我正在使用以下模型来匹配用户和项目。问题是user_item在 MySQL 表中生成的表中只有两列iddate. user并且item不在那里。是预期的吗?我希望这两列应该存在并分别存储 和 的userid item

项目.java

@Entity
public class Item extends Model {
    @Id
    public Long id;


    @OneToMany(cascade = CascadeType.ALL, mappedBy="user")
    public List<UserItem> userItems = new ArrayList<UserItem>();
}

用户.java

@Entity
public class User extends Model {
    @Id
    public Long id;

    @OneToMany(cascade = CascadeType.ALL, mappedBy="item")
    public List<UserItem> userItems = new ArrayList<UserItem>();
}

用户项目.java

@Entity
public class UserItem extends Model {
    @Id
    public Long id;

    @ManyToOne
    @JoinColumn(name = "id")
    public User user;

    @ManyToOne
    @JoinColumn(name = "id")
    public Item item;

    public Date date;

    ...
}

编辑:我期望的是该item_user表将具有列useritem并且将具有 long 类型并存储相应对象的 id。为什么我的理解在这里不正确?

4

1 回答 1

2

您不能有两个具有相同名称的列。删除您在 UserItem 中的注释 @JoinColumn 或为用户和项目设置不同的名称(即:user_id、item_id)

编辑:注意@OneToMany 注释的获取类型。如果您有大量数据,则在加载用户或项目时会遇到很大的性能问题;)

编辑

@Entity
public class UserItem extends Model {
    @Id
    public Long id;

    @ManyToOne
    @JoinColumn(name = "user")
    public User user;

    @ManyToOne
    @JoinColumn(name = "item")
    public Item item;

    public Date date;

    ...
}
于 2013-10-21T13:03:06.750 回答