我試圖做使用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 15:12:56
固定。我在User類中留下了一些映射,因爲它們可能也是錯誤的:) – StepTNT 2012-01-05 15:21:25
'Mention. mentioned'應該被'User.username'引用。 '以下'沒有'用戶名'字段,但是它與這個映射一起工作,''Mention'完全相同 – StepTNT 2012-01-05 16:03:05