日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 实体类 代码重复_java – JPA两个单向@OneToMany关系到同一个实体导致重复输入...

發布時間:2024/9/27 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 实体类 代码重复_java – JPA两个单向@OneToMany关系到同一个实体导致重复输入... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我目前正在開展一個學校項目,我們必須創建自己的“Twitter”應用程序,并且我在域對象的持久性方面遇到了一些麻煩.

我的帳戶類(為便于閱讀而簡化):

@Entity

public class Account implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.SEQUENCE)

private Long id;

@Column(unique = true)

private String email;

@OneToMany

private final List following = new ArrayList<>();

@OneToMany(mappedBy = "tweetedBy", cascade = ALL)

private final List tweets = new ArrayList<>();

我的推文類(為便于閱讀而簡化):

@Entity

public class Tweet implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.SEQUENCE)

private Long id;

private String content;

@ManyToOne

private Account tweetedBy;

@OneToMany(cascade = CascadeType.PERSIST)

@JoinTable(name = "tweet_likes")

private final List likedBy = new ArrayList<>();

@OneToMany(cascade = CascadeType.PERSIST)

@JoinTable(name = "tweet_mentions")

private final List mentions = new ArrayList<>();

持久代碼(簡化):

Account a1 = new Account("user1@gmail.com", "password1");

Account a2 = new Account("user2@gmail.com", "password2");

Account a3 = new Account("user3@gmail.com", "password3");

a1.addTweet("Sup mah dudes.");

a1.addTweet("yoyo");

a2.addTweet("Allo Allo #tweeting");

a2.addTweet("#testing yoyo");

a1.getTweets().get(0).addLike(a3);

a1.addFollowing(a3);

em.persist(a1);

em.persist(a2);

em.persist(a3);

我遇到的問題是,LikeBy和提及沒有正確持久化.正在生成鏈接器表并插入數據,但我在插入用戶時不斷出現重復的條目錯誤.我相信我正確地建立了關系(單向OneToMany),因為我不希望帳戶跟蹤它所提到的推文.

我嘗試過的:

> @JoinColumn用于喜歡和提及(導致重復插入)

>對于喜歡和提及的@JoinTable(導致重復插入)

>只有@OneToMany用于喜歡和提及(這不會導致錯誤,但會為兩個關系創建一個鏈接器表,其中任何一個都不能為null)

> @OneToMany for likes,然后@joinColumn提及nullable = true(這導致你不能在推文中提及你的情況,除非你喜歡它,這是奇怪的行為)

> @OneToMany(cascade = CascadeType.MERGE)(導致重復插入)

Netbeans輸出的重復插入錯誤:

Warning: Local Exception Stack:

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.qualifier): org.eclipse.persistence.exceptions.DatabaseException

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'user6@gmail.com' for key 'EMAIL'

Error Code: 1062

Call: INSERT INTO ACCOUNT (AVATARPATH, BIO, EMAIL, ENCRYPTEDPASSWORD, LOCATION, USERNAME, USERROLE, WEBSITE) VALUES (?, ?, ?, ?, ?, ?, ?, ?)

bind => [8 parameters bound]

Query: InsertObjectQuery(domain.Account@3c7f9d54)

我相信這個錯誤的發生是因為我的JPA imlementation的流程如下:

>帳戶持續存在

>推文持續存在(因為它在賬戶內)

>帳戶持續存在(因為它在Tweet內)< - 重復條目

我期待的是:

> 1個鏈接表,其中包含tweet_id(fk)和表示喜歡的account_id(fk)

> 1個鏈接表,其中包含tweet_id(fk)和表示提及的account_id(fk)

如果有人可以幫我解釋注釋或者解釋我做錯了什么,那將非常感激.

Ty提前獲得任何幫助.

總結

以上是生活随笔為你收集整理的java 实体类 代码重复_java – JPA两个单向@OneToMany关系到同一个实体导致重复输入...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。