Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring Boot JPA-按2列查找_Spring Boot_Hibernate_Spring Data Jpa - Fatal编程技术网

Spring boot Spring Boot JPA-按2列查找

Spring boot Spring Boot JPA-按2列查找,spring-boot,hibernate,spring-data-jpa,Spring Boot,Hibernate,Spring Data Jpa,我不知道如何创建JPA查询以从我的表中获取所有记录: @Entity @Table(name = "A") public class A{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nullable = false, updatable = false) private Long id; @ManyToOne(fetch = FetchType.E

我不知道如何创建JPA查询以从我的表中获取所有记录:

@Entity
@Table(name = "A")
public class A{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false, updatable = false)
    private Long id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "message_id")
    private Message;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private User user;
}
所以我在一个表中有两种类型的对象(有时对象是从电子邮件创建的,有时是从文件创建的):

  • 一个类型没有
    user\u id
    (null)->然后我必须通过
    Message->Account->id
    搜索所有
    A
    对象
  • 第二种类型具有
    user\u id
    ->我们可以通过
    user\u id
    列中的值直接获得
    A
    对象
  • 我想获取特定
    用户id
    ->的所有记录如何以最有效的方式进行?我不想调用存储库中的两个方法:

     User user = userService.getEmail();
            List<A> aObjects= Stream.concat(ARepository.findByMessage_Account_Id(user.getId()).orElse(new ArrayList<>()).stream(),
                    aRepository.findByUser_Id(user.getId()).orElse(new ArrayList<>()).stream()).collect(Collectors.toList());
    
    User=userService.getEmail();
    List aoobjects=Stream.concat(一个pository.findByMessage_Account_Id(user.getId()).orElse(new ArrayList()).Stream(),
    aRepository.findByUser_Id(user.getId()).orElse(newarraylist()).stream()).collect(Collectors.toList());
    

    是否可以创建一个存储库方法来查找两个不同对象的所有记录(一个具有
    user\u id
    ,另一个不具有
    user\u id
    )?

    我想这个查询对于使用从方法名称查询派生的查询来说太复杂了。正如报告中所述:

    虽然从方法名派生的查询非常方便,但是可能会遇到这样的情况:要么方法名解析器不支持想要使用的关键字,要么方法名变得不必要的丑陋。因此,您可以通过命名约定使用JPA命名查询,也可以使用
    @query
    注释查询方法

    因此,我建议只编写以下查询:

    @Query(“从aa left join aa.user u left join aa.message msg left join msg.account acc中选择aa,其中(u为null,acc为非null,acc.id=:userId)或(u为非null,u.id=:userId)”)
    列出findByUserOrAccountId(@Param(“userId”)Long userId);
    
    不幸的是,我仍然得到满足第一个要求的值:where(aa.user为null,aa.message.account.id=:accountId)。userId与accountid相同尝试使用更新的queryeahh现在它可以工作了:)谢谢:)这不是那么容易。。。
     User user = userService.getEmail();
            List<A> aObjects= Stream.concat(ARepository.findByMessage_Account_Id(user.getId()).orElse(new ArrayList<>()).stream(),
                    aRepository.findByUser_Id(user.getId()).orElse(new ArrayList<>()).stream()).collect(Collectors.toList());