Spring Boot总结不相关的实体

时间:2019-09-27 18:00:16

标签: java spring hibernate spring-boot

我是Spring的初学者,想用Spring / Angular构建团队帐户应用。目前,我正在构建REST API。

我一方面有事件。活动是指存款人需要付款的日子。

import lombok.*;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

@AllArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Setter
@Getter
@Entity
@Table(name = "events")
public class Event extends AuditModel
{

    @Id
    @GeneratedValue(generator = "event_generator")
    @SequenceGenerator(
            name = "event_generator",
            sequenceName = "event_sequence",
            initialValue = 1000
    )
    private Long id;

    @NotNull(message = "Name may not be null")
    private String name;
    private LocalDate dueDate;
    @NotNull(message = "Sum may not be null")
    private int sum;

    @OneToMany(mappedBy = "eventId")
    private List<Transaction> transactions = new ArrayList<>();
}

另一方面,存在交易。在这种情况下,交易是指存款人支付了一些钱。


import lombok.*;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;

@AllArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Setter
@Getter
@Entity
public class Transaction extends AuditModel
{
    @Id
    @GeneratedValue(generator = "transaction_generator")
    @SequenceGenerator(
            name = "transaction_generator",
            sequenceName = "transaction_sequence",
            initialValue = 1000
    )
    private Long id;

    private Long eventId;

    private Long depositorId;
    @NotNull(message = "Name may not be null")
    private Integer sum;

    private LocalDateTime dateTime;


}

在存款人中,我想根据DueDays / Dates关联交易和事件。

import lombok.*;
import lombok.extern.log4j.Log4j2;
import org.hibernate.annotations.Formula;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

@AllArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Setter
@Getter
@Entity
@Table(name = "depositors")
@Log4j2
public class Depositor extends AuditModel
{

    @Id
    @GeneratedValue(generator = "depositor_generator")
    @SequenceGenerator(
            name = "depositor_generator",
            sequenceName = "depositor_sequence",
            initialValue = 1000
    )
    private Long id;

    @NotNull(message = "Name may not be null")
    private String name;
    private String phoneNumber;
    @NotNull(message = "DueDay may not be null")
    private LocalDate dueDay;

    @Formula("(select sum(t.sum) from Transaction t where t.depositor_id = id)")
    private Integer payedSum;

    @OneToMany(mappedBy = "depositorId")
    private List<Transaction> transactions = new ArrayList<>();

}

我后面有基本的空存储库。数据存储在PostgreSQL数据库中。在那里,此SQL查询为我提供了正确的结果:

SELECT d.name, d.phone_number, d.due_day, d.created_at, d.updated_at, (SELECT SUM(e.sum) FROM events AS e WHERE e.due_date >= d.due_day) AS sumToPayTotal FROM depositors AS d;

如何在实体或存储库中使用无关的数据来显示计算出的值?

0 个答案:

没有答案