微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与JPA具有多对多关系的SQL查询

如何解决与JPA具有多对多关系的SQL查询

我在spring-jpa-project中有一个多对多关系,但是我找不到一种方法来让我的Query执行它应该做的事情。也许任何人都可以帮忙...

我有三个实体:

用户

@Entity
public class User {
 @Id private String userName;
}

UserSettings

@Entity
public class UserSettings {
    @Id private String userName;

    private EMailDeliveryType emailDelivery;
}

和事件

@Entity
public class Event {

    @Id
    private Long id;

    private Long dailyMailSent;

    @ManyToMany(fetch = EAGER)
    private Set<User> recipients;
}

我的存储库如下:

@Repository
public interface StateChangeEventRepository extends JpaRepository<Event,Long> {


    @Modifying
    @Query(
            "UPDATE Event s SET s.dailyMailSent = extract(EPOCH FROM CURRENT_TIMESTAMP) "
                    + "WHERE s.dailyMailSent IS NULL "
                    + "AND ("
                    + "         s.recipients IS EMPTY OR "
                    + "        (SELECT user FROM User user JOIN UserSettings settings ON "
                    + "         settings.userName = user.userName WHERE settings.emailDelivery = 25) "
                    + "        NOT MEMBER OF s.recipients"
                    + "  )")
    void markUnprocessableDailyEventsAsFinished();
}

所以我要做的是标记查找所有具有DailyMailSent = null的事件,或者它们没有接收者,或者没有任何接收者的userSetting具有特定的emailDelivery。 此查询不起作用,因为子查询返回了多个用户,然后我遇到错误

ERROR:  more than one row returned by a subquery used as an expression

有人知道如何解决此问题吗?我尝试了几种选择,但是没有一个起作用。

提前感谢,马蒂亚斯

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。