简体   繁体   中英

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.

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;
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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