[英]One to many - many to one relationship in Spring JPA
我有这张优惠券 Class
package Kinn.College.CouponManagementSystem.entities;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table (name = "companies")
public class Company {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column (name = "company_id")
private int id; // id of the company
@Column (name = "company_name")
private String name; // name of the company
@Column (name = "company_email")
private String email; // email of the company
@Column (name = "company_password")
private String password; // password of the company
@OneToMany(mappedBy = "company_id", cascade = CascadeType.ALL)
private List<Coupon> coupons;
}
我有这家公司 class
package Kinn.College.CouponManagementSystem.entities;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table (name = "companies")
public class Company {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
@Column (name = "company_id")
private int id; // id of the company
@Column (name = "company_name")
private String name; // name of the company
@Column (name = "company_email")
private String email; // email of the company
@Column (name = "company_password")
private String password; // password of the company
@OneToMany(mappedBy = "company_id", cascade = CascadeType.ALL)
private List<Coupon> coupons;
}
出于某种原因,当我尝试从数据库中获取带有优惠券列表的公司时,一对多 - 多对一关系会产生错误。
我正在使用此语法从 DB 获取一个 copmany。
{
Company company = companyService.getCompanyById(1);
System.out.println("Got company by id: " + company);
}
如果我从每家公司中删除优惠券列表,它就可以正常工作。 这是错误信息;
2023-01-16T11:59:33.266+02:00 ERROR 16808 --- [ main] j.LocalContainerEntityManagerFactoryBean : Failed to initialize JPA EntityManagerFactory: Collection 'Kinn.College.CouponManagementSystem.entities.Company.coupons' is 'mappedBy' a property named 'company_id' which does not exist in the target entity 'Kinn.College.CouponManagementSystem.entities.Coupon'
我试过询问多个非常了解 Spring 的人,他们都说它看起来不错,应该可以工作。
mapped_by
引用属性或引用的 class,而不是列名:
@OneToMany(mappedBy = "id", cascade = CascadeType.ALL)
private List<Coupon> coupons;
顺便说一句:注意 java 命名约定。 Package 名称只能包含小写字符
我假设一家公司可以关联许多优惠券。
所以在优惠券class 中,你可以有一个 Company 成员代表它所属的公司:
@ManyToOne
@JoinColumn(name = "company_id")
private Company company;
在这里,company_id 将成为指向公司表主键的外键
在公司class 中,您可以拥有它拥有的优惠券列表:
@OneToMany(mappedBy = "company", orphanRemoval = true)
private List<Coupon> coupons = new ArrayList<>();
Company
实体应该有一个字段指向其所有优惠券,如下所示:
@OneToMany(mappedBy="company")
private Set<Coupon> coupons;
mappedBy
字段是我们将在Coupon
实体中使用的实例变量名称,用于指向关联的Company
。
Coupon
实体应该有一个字段来指向它的所有优惠券,例如:
@ManyToOne
@JoinColumn(name="company_id", nullable=false)
private Company company;
名称字段是指Coupon
表中指向Company
表的外键的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.