[英]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.