我有一个用户实体和文章实体.取文章的类型是懒惰的.我不需要一直加载文章,但我有一个 case 中,我需要加载用户Collection 的文章.我怎么才能有条件地做呢?

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
        name = "user_favorite_articles",
        joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "userId", nullable = false),
        inverseJoinColumns = @JoinColumn(name = "article_id", referencedColumnName = "articleId")
)
private List<Article> favoriteArticles;

推荐答案

从你的 comments 中,我了解到你想为用户添加一篇最喜欢的文章.这可以在服务类中完成:

public User addFavoriteArticle(User user, Article article) {
    user.getFavoriteArticles().add(article);
    log.info("Article {} added to favorites of user: {}", article, user);
    return userRepository.save(user);
}

同样,您也可以删除该文章:

public User removeFavoriteArticle(User user, Article article) {
    user.getFavoriteArticles().remove(article);
    log.info("Article {} removed from favorites of user: {}", article, user);
    return userRepository.save(user);
}

How it works:最初将在没有Collection 文章列表的情况下获取用户实体.Hibernate将在那里放置一个代理.只要您的代码使用getFavoriteArticle方法访问该列表,就会从数据库加载该列表.它可以被修改并保存到数据库中.

Please note:要使此代码正常工作,您需要在实体中正确实现hashCode和equals方法.可以很容易地用龙目鱼完成.您应该更好地将集合定义为集合,而不是列表.更好的性能.

Java相关问答推荐

如何在Android上获取来电信息

Oracle DUAL表上使用DDL时jOOQ问题的解析'

ApachePOI:不带换行的新行

给定Java枚举类,通过值查找枚举

在模拟超类中设置非setter属性的值

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

如何修复IndexOutOfBoundsException在ClerView适配器的onRowMoved函数?

Java-动态绑定-问题-了解

Java Mooc.fi Part 12_01.Hideout -返回和删除方法

如何在antlr4中跳过所有反斜杠-换行符而保留换行符?

try 在Android Studio中的infoWindow中使用EditText(Java)

使用htmlunit和java单击按钮

如何用内置Java从JavaFX应用程序中生成.exe文件?

从Spring6中的JPMS模块读取类时出现问题

将双倍转换为百分比

如何制作回文程序?

如何设计包含已知和未知键值对映射的Java类?

谷歌应用引擎本地服务器赢得';t在eclipse上运行

Java方法参数:括号中的类型声明?

Java中计算大n和k值模10^9+7的二项式系数的乘法公式输出错误值