
我正在尝试使用Java2EE做一个类似twitter的项目,下面是数据库的一个简单视图。
提到,追随者和以下是三个JoinTable。(请注意,前面提到的、跟随者、跟随者和每个用户字段都有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;我的地图怎么了?有人能帮我找到解决办法吗?
发布于 2012-01-05 16:12:21
我认为你必须改变
@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;https://stackoverflow.com/questions/8744715
复制相似问题