JPA插入连接表?

问题描述 投票:0回答:1

我正在开发一个应用程序,员工可以跟踪其工作时间。

现在我想通过JPA将小时数添加到数据库中。

现在我正在将数据存储到数据库中。

用户:

@Entity
@Table(name = "USER")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String username;
    private String password;
    private String fullname;
    private String email;
    private String creation_date;

    // user roles
    @ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
    @CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"))
    @Enumerated(EnumType.STRING)
    private Set<Role> roles;

    @ManyToMany(cascade = {
            CascadeType.PERSIST,
            CascadeType.MERGE
    })
    @JoinTable(name = "user_hour",
            joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "hour_id")
    )

    private List<Hour> hours = new ArrayList<>();

    public User() {

    }

    public User(String username, String password, String fullname, String email, String creation_date) {
        this.username = username;
        this.password = password;
        this.fullname = fullname;
        this.email = email;
        this.roles = getRoles();
        this.creation_date = creation_date;
    }

    //If user is admin
    public boolean isAdmin() {
        return roles.contains(Role.ADMIN);
    }

    //region Getters & Setters
    public void setId(int id) {
        this.id = id;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public void setFullname(String fullName) {
        this.fullname = fullName;
    }
    public void setEmail(String email) { this.email = email; }
    public void setRoles(Set<Role> roles) { this.roles = roles; }
    public void setCreation_date(String creation_date) { this.creation_date = creation_date; }

    public int getId() { return id; }
    public String getUsername() {
        return username;
    }
    public String getPassword() {
        return password;
    }
    public String getFullname() {
        return fullname;
    }
    public String getEmail() { return email; }
    public Set<Role> getRoles() { return roles; }
    public String getCreation_date() { return creation_date; }
    //endregion
}

小时:

@Entity
@Table(name = "HOUR")
public class Hour {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String date;
    private String startTime;
    private String endTime;


    public Hour(int id, String date, String startTime, String endTime) {
        this.id = id;
        this.date = date;
        this.startTime = startTime;
        this.endTime = endTime;
    }

    public Hour(){

    }

    @ManyToMany(mappedBy = "hours")
    private List<User> users = new ArrayList<>();

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getStartTime() {
        return startTime;
    }

    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }

    public String getEndTime() {
        return endTime;
    }

    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }
}

我的REST控制器已经获取了正确的值。我现在处于必须将其插入数据库的部分

ClockingService:

@Component
public class ClockingService implements ClockRepository {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public Boolean addStartTime(Hour hour, Integer userID) {

        // Insert userID into join table user_hour

        // Insert hour into table hour

        return null;
    }
}
hibernate jpa jointable
1个回答
0
投票

请检查此算法,避免自己在连接表中插入行(这需要实现NATIVE查询)

@Override
 public Boolean addStartTime(Hour hour, Integer userID) {

        // findUserById

        // add hour to the user's hours

        // update the user
 }

让我知道您是否发现实施它时遇到任何问题

© www.soinside.com 2019 - 2024. All rights reserved.