Как сопоставить результаты хранимой процедуры с сущностью в spring-boot / hibernate - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть класс сущностей, как показано ниже

Примечание: checkNumber уникален.

package tz.go.ega.biometic.entity;


import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;

import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import lombok.ToString;
import org.hibernate.annotations.NaturalId;
import org.hibernate.validator.constraints.SafeHtml;
import org.springframework.data.annotation.Transient;
import org.springframework.format.annotation.DateTimeFormat;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "employee", uniqueConstraints = {
        @UniqueConstraint(columnNames = {"check_number"})
})
@Data
@AllArgsConstructor
@ToString
@NoArgsConstructor
public class Employee implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Long id;

    @Basic(optional = true)
    //@NotEmpty(message = "Please enter first name")
    @Column(name = "first_name")
    private String firstName;

    @Basic(optional = true)
    //@NotEmpty(message = "Please enter middle name")
    @Column(name = "middle_name")
    private String middleName;

    @Basic(optional = true)
    //@NotEmpty(message = "Please enter last name")
    @Column(name = "last_name")
    private String lastName;

    private String status;

    @Basic(optional = true)
    // @Pattern(regexp ="^[a-zA-Z0-9_]*$",message = "{field.validation.voteCode}")
    // @SafeHtml(message = "{field.validation.voteCode}")
    @Column(name = "vote_code", length = 50)
    private String voteCode;

    @NaturalId
    @Basic(optional = true)
    //@NotNull(message = "Please enter check number")
    @Column(name = "check_number")
    private long checkNumber;

    private Boolean isActive = true;


    @Basic(optional = false)
    @Column(name = "created_at", updatable = false)
    @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    private LocalDateTime createdAt = LocalDateTime.now();

    @Column(name = "updated_at")
    @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    private LocalDateTime updatedAt = LocalDateTime.now();


    @Column(name = "email")
    private  String email;
}

У меня есть хранимая процедура, которая вычисляет работу каждого сотрудника.Затем часы возвращают результаты, как показано ниже.

+--------------+-------+
| checkNumber  | Time  |
+--------------+-------+
| 1122334455   | 29893 |
| 1234567890   | 15427 |
| 2233445566   | 19745 |
| 6655443322   | 12578 |
+--------------+-------+

Я пытаюсь добиться того, чтобы сопоставить результаты (как показано выше) хранимой процедуры с сущностью (давайтеназовите его EmployeeWorkHours), а затем создайте связь между этим объектом и объектом Employee, используя checkNumber.

Я хочу, чтобы объект EmployeeWorkHours мог ссылаться на своего сотрудника напрямую, как в обычных спящих отношениях.

Как я могу это сделать, любая помощь будет высоко оценена.Спасибо.

1 Ответ

0 голосов
/ 20 сентября 2019

В вашей сущности EmployeeWorkHours вам нужны отношения OneToOne с сущностью Employee

@OneToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "checkNumber", unique = true, nullable = false)
private Employee employee;

В своем хранилище вы можете написать SQL-запрос, подобный следующему:

@Query(value = "{CALL yourStoredProcedure (:var1, :var2, ..., :varn)}", nativeQuery = true)
int getWorkHours(@Param("var1") String var1, @Param("var2") String var2,...,
        @Param("varn") String varn);

И затем в вашем сервисеСлой вы просто вызовете этот метод, сделайте то, что вы хотите, и сохраните его.Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...