Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Java 若嵌套对象列表只有一个特定值,JPA是否在数据库中查找实体?_Java_Jpa_Spring Data Jpa - Fatal编程技术网

Java 若嵌套对象列表只有一个特定值,JPA是否在数据库中查找实体?

Java 若嵌套对象列表只有一个特定值,JPA是否在数据库中查找实体?,java,jpa,spring-data-jpa,Java,Jpa,Spring Data Jpa,我有以下两个表,一个包含指令列表,另一个基本上是指令状态更改的审计跟踪。例如,一条指令的初始状态为“待定”,然后可以移动到“已授权”或“已取消”或“正在进行”等,我们会跟踪谁将其移动到了什么状态,以及何时等 @Entity @Table(name = "INSTRUCTION") public class Instruction { @Id @Column(name = "ID", nullable = false, unique = t

我有以下两个表,一个包含指令列表,另一个基本上是指令状态更改的审计跟踪。例如,一条指令的初始状态为“待定”,然后可以移动到“已授权”或“已取消”或“正在进行”等,我们会跟踪谁将其移动到了什么状态,以及何时等

@Entity
@Table(name = "INSTRUCTION")
public class Instruction {

    @Id
    @Column(name = "ID", nullable = false, unique = true)
    public Long id;

    @Column(name = "ACCOUNT", nullable = false)
    public String account;

    @OneToMany(cascade = CascadeType.All, fetch = FetchType.EAGER)
    @JoinColumn(name = "INSTRUCTION_ID", referenceColumnName = "ID")
    @OrderBy("lastUpdated")
    private List<Audit> auditItems = new ArrayList<>();

    //Getters & Setters
}
我必须编写一个查询,返回给定帐户的所有“待定”指令。到目前为止,我已经计算出了
列表findbyaudititemstatusandaccount(指令status status,String account)
,它将返回列表中有“待定”审核项的所有指令。但是,这将返回包含其他审核项目的指令,例如同时包含“待定”和“授权”的指令,我不希望这样做,因为该指令现在已移动到授权状态,不再待定。我只想返回指示,其中最新的审计项目是提供的状态(在本例中为“待定”),但我也可以说通过它“授权”,它将检索最新审计项目状态为“授权”的指示,以此类推

有没有办法编写查询来获取这个?我知道我可以保持查询的原样,然后使用java对其进行过滤,但如果可能的话,我宁愿尝试在数据库级别进行过滤


有关一些说明,请参见此链接。基本上,我想要一个只返回该示例中的帐户H的查询。这可能吗?

对于此问题,可以使用如下子查询:

SELECT INSTRUCTION.ACCOUNT, INSTRUCTION.ID FROM INSTRUCTION 
INNER JOIN INSTRUCTION_AUDIT ON INSTRUCTION.ID = INSTRUCTION_AUDIT.INSTRUCTION_ID
WHERE INSTRUCTION.ID not in (SELECT INSTRUCTION_ID
                             FROM INSTRUCTION_AUDIT 
                             WHERE STATUS !='PENDING');

您可以在中测试查询。

对于此问题,您可以使用如下子查询:

SELECT INSTRUCTION.ACCOUNT, INSTRUCTION.ID FROM INSTRUCTION 
INNER JOIN INSTRUCTION_AUDIT ON INSTRUCTION.ID = INSTRUCTION_AUDIT.INSTRUCTION_ID
WHERE INSTRUCTION.ID not in (SELECT INSTRUCTION_ID
                             FROM INSTRUCTION_AUDIT 
                             WHERE STATUS !='PENDING');
您可以在中测试查询