Я новичок в 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;
}
В вкладчике я так или иначе хочу связать транзакции и события в зависимости от даты / даты.
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;
Как использовать несвязанные данные в сущности или хранилище для отображения вычисленного значения?