我是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;
如何在实体或存储库中使用无关的数据来显示计算出的值?