Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/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
Java 来自JPA联接的有效派生计数_Java_Hibernate_Spring Boot_Jpa - Fatal编程技术网

Java 来自JPA联接的有效派生计数

Java 来自JPA联接的有效派生计数,java,hibernate,spring-boot,jpa,Java,Hibernate,Spring Boot,Jpa,我有一个Spring Boot应用程序,使用JpaRepository访问我的数据 我遇到了一个问题,那就是如何在一个单一的场景中找到最优雅、最高效的属性聚合解决方案 我有以下场景: public class Item { @Id private int Id; /* @OneToMany(mappedBy = "item") @JsonIgnore private List<LoggedItem> loggedItems

我有一个Spring Boot应用程序,使用
JpaRepository
访问我的数据

我遇到了一个问题,那就是如何在一个单一的场景中找到最优雅、最高效的属性聚合解决方案

我有以下场景:

public class Item {

    @Id
    private int Id;

    /*
    @OneToMany(mappedBy = "item")
    @JsonIgnore
    private List<LoggedItem> loggedItems

    @JsonProperty("instances")
    public int instances() {
        return loggedItems.size();
    }

    @JsonProperty("lastRun")
    public LocalDateTime lastRun() {
        return loggedItems.stream().
            .map(LoggedItem::getExecutedAt)
            .max(LocalDateTime::compareTo)).orElse(null);

    }

    */
}
我尝试不使用派生列,而是依赖于列表,但是我得到了重复的行。是的,添加distinct关键字可以消除这些问题,但它仍然显得效率很低

我还探讨了使用不同的
@Fetch
模式和@JsonManagedReference/@JsonBackReference(尽管这些只是为了防止序列化时出现无限递归)


有人能推荐最合适的方法吗?

您希望在这里实现什么?你说的派生计数是什么意思?为什么不创建一个DTO并创建一个查询来计算计数和最大日期?@MushifAliNawaz,我正在尝试实现我在我的项目中注释掉的属性class@SimonMartinelli我认为这听起来很合理。我在哪里计算?在mapper?中,让查询返回最大执行时间。您可以使用自定义
@Query
在存储库中编写方法。
public class LoggedItem {

    @Id
    private int Id;

    LocalDateTime executedAt;

    @ManyToOne
    @JoinColumn(name = ""item_id", referencedColumnName = "id")
    private Item item;
}