hibernate - 使用它们的 Id 从两个表创建一个表
问题描述
我一直在尝试理解 Hibernate 映射,但我就是不明白。在春季项目中使用休眠。用于数据库的 mysql 工作台。
每张桌子都有一个 ID、优惠券和公司。当公司创建优惠券时,我希望优惠券 ID 和公司 ID 转到名为 companyCoupon 的第三个表并将其映射到那里:
一家公司可能有很多优惠券。优惠券可能与 ONE 公司相关联。
公司编号 = 1;优惠券 ID = 1;
公司优惠券-compid = 1;coupid = 1;
我创建了第三个表并伪造了映射到其他表的键。
任何人?有任何想法吗?好文章要读吗?
编辑 :
package com.example.CouponProjectCore.entity;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "coupons")
public class Coupon {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="coupid")
private long coupid;
@Column(name="title")
private String title;
@Column(name="startd")
private String startd;
@Column(name="endd")
private String endd;
@Column(name="amount")
private int amount;
@Column(name="type")
private String type;
@Column(name="message")
private String message;
@Column(name="price")
private double price;
@Column(name="image")
private String image;
@ManyToOne()
private Company company;
public Coupon(String title, String startd, String endd, int amount, String type, String message, double price,
String image) {
super();
this.title = title;
this.startd = startd;
this.endd = endd;
this.amount = amount;
this.type = type;
this.message = message;
this.price = price;
this.image = image;
}
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
public long getCoupid() {
return coupid;
}
public void setCoupid(long coupid) {
this.coupid = coupid;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getStartd() {
return startd;
}
public void setStartd(String startd) {
this.startd = startd;
}
public String getEndd() {
return endd;
}
public void setEndd(String endd) {
this.endd = endd;
}
public int getAmount() {
return amount;
}
public void setAmount(int amount) {
this.amount = amount;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
@Override
public String toString() {
return "Coupon [coupid=" + coupid + ", title=" + title + ", startd=" + startd + ", endd=" + endd + ", amount="
+ amount + ", type=" + type + ", message=" + message + ", price=" + price + ", image=" + image
+ "]";
}
}
2:
package com.example.CouponProjectCore.entity;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SecondaryTable;
import javax.persistence.Table;
@Entity
@Table(name = "company")
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "comp_name")
private String comp_name;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
@OneToMany()
@JoinColumn(name="id")
private List<Coupon> coupons;
@Column(name = "client_type")
@Enumerated(EnumType.STRING)
private ClientType client_type = ClientType.COMPANY;
public Company() {
}
public Company(String comp_name, String password, String email, List<Coupon> coupons, ClientType client_type) {
super();
this.comp_name = comp_name;
this.password = password;
this.email = email;
this.coupons = coupons;
this.client_type = client_type;
}
public void addCoupon(Coupon coupon) {
if (coupons == null) {
coupons = new ArrayList<Coupon>();
}
coupons.add(coupon);
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getComp_name() {
return comp_name;
}
public void setComp_name(String comp_name) {
this.comp_name = comp_name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public List<Coupon> getCoupons() {
return coupons;
}
public void setCoupons(List<Coupon> coupons) {
this.coupons = coupons;
}
public ClientType getClient_type() {
return client_type;
}
public void setClient_type(ClientType client_type) {
this.client_type = client_type;
}
@Override
public String toString() {
return "Company [id=" + id + ", comp_name=" + comp_name + ", password=" + password + ", email=" + email
+ ", coupons=" + coupons + ", client_type=" + client_type + "]";
}
}
解决方案
好的,那么您无需添加第三张表,只需添加带有 companyId 的优惠券列表
//add in Company Enitity
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="COMPANY_ID")
private List<CouponsEntity> coupons;
//add in Coupons Enitity
@ManyToOne
private CompanyEntity company;
这是静态示例,您可以了解
Company user= new Company();
user.setId(1);
user.setComp_name("qwqwq");
user.setEmail("dde@gmail.com");
user.setPassword("w1w");
Coupon c= new Coupon("wssw", "2019", "2201", 1, "1w1", "1w1w", 2.3, "w1w1w1", user);
Coupon c1= new Coupon("wssw", "2019", "2201", 1, "1w1", "1w1w", 2.3, "w1w1w1", user);
Coupon c2= new Coupon("wssw", "2019", "2201", 1, "1w1", "1w1w", 2.3, "w1w1w1", user);
Coupon c3= new Coupon("wssw", "2019", "2201", 1, "1w1", "1w1w", 2.3, "w1w1w1", user);
List<Coupon> coupons = new ArrayList<Coupon>();
coupons.add(c);
coupons.add(c1);
coupons.add(c2);
coupons.add(c3);
user.setCoupons(coupons);
推荐阅读
- hibernate - 条件谓词中的 Hibernate 本机查询
- html - 如何将个人资料图像制作成圆形
- excel - 在具有分离数据的列中查找最早的日期
- wordpress - Wordpress 插件导出到 csv 没有下载
- c++ - 在 C++ 中重置大对象实例的最佳方法是什么
- c - RabbitMQ c 客户端库 - amqp_basic_get() 与 amqp_basic_consume() - 数据容器
- d3.js - 刷覆盖矩形事件与其他元素事件冲突
- oracle - 从 sqlloader 加载 Oracle 表
- jsf - 提取树内置过滤器以分离输入
- android - 图库中的共享按钮和过滤文件扩展名