gpt4 book ai didi

java - Hibernate @ManyToMany 在插入的拥有端插入 0

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:32 25 4
gpt4 key购买 nike

尝试弄清楚如何让我的 @ManyToMany 映射在 Dropwizard 的 Hibernate 中工作(使用 dropwizard-hibernate 6.2)有点麻烦。我已经尝试了几个在线示例。我正在尝试保留一个 Twitter 流,其中 user_mentions 保存在 Targets 表中,该表与 Tweets 表是 m2m。到目前为止,我所有的尝试都是使用现有的目标和新的推文(并且由于我的业务规则,情况总是如此)。我将立即显示代码,但我遇到的一致问题是 tweets_targets 表在所有情况下都会将 target_id 设置为正确的值,但 tweet_id 设置为 0。

代码基于此处的一篇文章:http://viralpatel.net/blogs/hibernate-many-to-many-annotation-mapping-tutorial/

// Target class
@Entity
@Table(name="targets")
public class Target {
private long id;
private List<Tweet> tweets = new ArrayList<Tweet>();
@Id
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@ManyToMany(mappedBy="targets",targetEntity=Tweet.class)
public List<Tweet> getTweets() {
return tweets;
}
public void setTweets(List<Tweet> tweets) {
this.tweets = tweets;
}
}

// Tweet class
@Entity
@Table(name="tweets")
public class Tweet {
private long id;
private List<Target> targets = new ArrayList<Target>();
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "targets_tweets", joinColumns = {
@JoinColumn(name = "tweet_id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "target_id", nullable = false, updatable = false)
})
public List<Target> getTargets() {
return this.targets;
}

public void setTargets(List<Target> targets) {
this.targets = targets;
for(Target t: targets){
t.getTweets().add(this);
}
}
}

新推文的实际保存是在 DAO 类中完成的,该类继承自 DropWizard 中的 AbstractDAO。相关代码为:

public long create(Tweet tweet) {
tweet.setTargets(getTargets(tweet));
return persist(tweet).getId();
}

@SuppressWarnings("unchecked")
private List<Target> getTargets(Tweet tweet) {
String[] mentions = tweet.getUserMentions().split(",");

return namedQuery(Target.FIND_BY_HANDLE)
.setParameterList("handles", mentions).list();
}

我的命名查询仅根据流 API 报告的 Twitter 句柄返回所有目标的列表。

最佳答案

找到答案,希望这对其他人有帮助。

我的数据库中的 ID 是自动递增的(我知道,对此有各种各样的争论,但这就是我必须处理的),所以一旦我添加了注释 @GenerateValue(strategy=GenerationType.IDENTITY) 到 Tweet 的 Id 属性,一切就开始工作了。

关于java - Hibernate @ManyToMany 在插入的拥有端插入 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20746029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com