简体   繁体   English

Spring Boot 实体有另一个实体的列表

[英]Spring boot entity has a list of another entity

I have a problem with the following code:我对以下代码有疑问:

@Entity
@Table(name = "app_user")
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(unique = true)
    private String username;
    @Column(unique = true)
    private String email;
    private String name;
    private String password;
    @Enumerated(EnumType.STRING)
    private Role role;
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
    @JoinTable(name = "user_shoes",
            joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "shoes_id"))
    private List<Shoe> shoes = new ArrayList<>();
    @Builder.Default
    private final Instant created = new Date().toInstant();
}


@Entity
@Table(name = "shoes")
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
public class Shoe {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private User user;
    private String brand;
    private String type;
    private String size;
    private String color;
    private String image_url;
    private String sex;
    @Builder.Default
    private Instant created = new Date().toInstant();
}

Inside User entity I want to make a list that contains Shoe entities, but I always get an error.在 User 实体内部我想创建一个包含 Shoe 实体的列表,但我总是会出错。

Table 'webshop.shoes' doesn't exist

Anybody know how to fix this problem?有人知道如何解决这个问题吗? It is required to my home project of a shoe webshop.它是我的一家鞋类网上商店的家庭项目所必需的。 Thanks.谢谢。

I had pretty similar codes with yours.我的代码和你的非常相似。 Please see mine and hope you solve it as I did.请看我的,希望你能像我一样解决它。


import com.fasterxml.jackson.annotation.JsonBackReference;
import lombok.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;

@Entity
@Getter
@Table(name = "orders")
@ToString(exclude = "user")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EntityListeners(AuditingEntityListener.class)
@SequenceGenerator(
        name = "order_seq_generator"
        , sequenceName = "orders_order_id_seq"
        , initialValue = 1
        , allocationSize = 1
)
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE
    , generator = "order_seq_generator")
    @Column(name = "order_id")
    private Long orderId;

    @Column(name = "order_number")
    private String orderNumber;

    @Column(name = "salad_date")
    private LocalDate saladDate;

    @Column(name = "order_date")
    @CreatedDate
    private LocalDateTime orderDate;

    @ManyToOne
    @JsonBackReference
    @JoinColumn(name = "user_id")
    private User user;

    @Column(name = "cancel_yn", columnDefinition = "boolean default false")
    private boolean cancelYn;

    @Builder
    public Order(String orderNumber, User user, LocalDate saladDate, boolean cancelYn) {
        this.orderNumber = orderNumber;
        this.user = user;
        this.saladDate = saladDate;
        this.cancelYn = cancelYn;
    }

    public void updateOrder(String orderNumber, boolean cancelYn) {
        this.orderNumber = orderNumber;
        this.cancelYn = cancelYn;
    }

}

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import lombok.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@ToString
@Table(name = "users")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EntityListeners(AuditingEntityListener.class)
@SequenceGenerator(
        name= "users_seq_generator"
        , sequenceName =  "users_user_id_seq"
        , initialValue = 1
        , allocationSize = 1
)
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE
    , generator = "users_seq_generator")
    @Column(name = "user_id")
    private Long userId;

    @Column(name = "password")
    private String password;

    @Column(name = "user_email")
    private String userEmail;

    @JsonIgnore
    @JsonManagedReference // Avoid infinite recursion
    @OneToMany(mappedBy = "user", cascade = CascadeType.PERSIST)
    private List<Order> orders = new ArrayList<>();

    @Column(name = "user_sabun")
    private String userSabun;

    @Column(name = "user_name")
    private String userName;

    @Column(name = "user_phone")
    private String userPhone;

    @Column(name = "send_email_yn")
    private boolean sendEmailYn;

    @Column(name = "join_date")
    @CreatedDate
    private LocalDateTime joinDate;

    @Builder
    public User(Long userId, String userEmail, String password, String userSabun, String userName, String userPhone, boolean sendEmailYn, LocalDateTime joinDate) {
        this.userId = userId;
        this.userEmail = userEmail;
        this.password = password;
        this.userSabun = userSabun;
        this.userName = userName;
        this.userPhone = userPhone;
        this.sendEmailYn = sendEmailYn;
        this.joinDate = joinDate;
    }

    public void userUpdate(String userEmail, String userSabun, String userName, String userPhone, boolean sendEmailYn) {
        this.userEmail = userEmail;
        this.userSabun = userSabun;
        this.userName = userName;
        this.userPhone = userPhone;
        this.sendEmailYn = sendEmailYn;
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM