Java JPA:@ManyToOne,1个表中不必要的重复条目
我有一个dealersearch,其中分销商是持久的。经销商的街道、姓名、电话号码等数据将通过excel文件以某种方式导入 在我的数据库中,我需要有关经销商数据导入的元数据。 我使用弹簧启动机jpa 我的模型: 导入(导入[-process]本身的元数据)Java JPA:@ManyToOne,1个表中不必要的重复条目,java,mysql,spring,jpa,Java,Mysql,Spring,Jpa,我有一个dealersearch,其中分销商是持久的。经销商的街道、姓名、电话号码等数据将通过excel文件以某种方式导入 在我的数据库中,我需要有关经销商数据导入的元数据。 我使用弹簧启动机jpa 我的模型: 导入(导入[-process]本身的元数据) 日期时间 状态(成功/失败) 进口经销商数量 承租人(哪个品牌/国家的经销商,例如美国的大众汽车) 环境(哪些服务器:生产、测试、开发) 房客 品牌(奥迪、大众、座椅) 市场(经销商所在国家/地区) 导入和租户已连接。每个导入包含一个
- 日期时间
- 状态(成功/失败)
- 进口经销商数量
- 承租人(哪个品牌/国家的经销商,例如美国的大众汽车)
- 环境(哪些服务器:生产、测试、开发)
- 品牌(奥迪、大众、座椅)
- 市场(经销商所在国家/地区)
导入是一个包含数据的导入对象数组,包括租户
使用uniqueConstraints注释只设置表“Tenant”的结构,而不设置行为。JPA仍然试图在“租户”表中复制条目。首先,如果您正在加载一个已经存在的架构并基于现有的表创建实体,那么架构中存在的唯一约束在重复发生时会导致异常。但是,如果要从实体创建表,则不能完全依赖注释强制唯一约束,如JPA wikibooks中所述: 有些人希望JPA提供商能够自动实现这一点 维持关系。这实际上是EJBCMP2的一部分 规范。但是,问题是对象是否已分离或 序列化到另一个VM,或新对象在被 托管,或者对象模型在JPA范围之外使用,则 魔法消失了,应用程序只能解决问题,所以 一般来说,最好将代码添加到对象模型中。 但是,一些JPA提供商确实支持自动 维持关系
首先,如果您正在加载一个已经存在的模式并基于现有表创建实体,那么模式中存在的唯一约束应该会在重复发生时导致异常。但是,如果要从实体创建表,则不能完全依赖注释强制唯一约束,如JPA wikibooks中所述: 有些人希望JPA提供商能够自动实现这一点 维持关系。这实际上是EJBCMP2的一部分 规范。但是,问题是对象是否已分离或 序列化到另一个VM,或新对象在被 托管,或者对象模型在JPA范围之外使用,则 魔法消失了,应用程序只能解决问题,所以 一般来说,最好将代码添加到对象模型中。 但是,一些JPA提供商确实支持自动 维持关系 “JPA”保存您传递给它的对象。如果您给它一个新的租户对象,那么您将在数据存储中得到一个新的租户对象。“JPA”将保存您传递给它的对象。如果给它一个新的租户对象,那么在数据存储中就会得到一个新的租户对象。
@Entity
public class Import {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "import_id")
private Long id;
private String datetime;
private String status;
private Integer numberOfDealers;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "tenant_id")
private Tenant tenant;
private String environment;
public Import() { }
public Import(String datetime, String status, Integer numberOfDealers, Tenant tenant, String environment) {
this.datetime = datetime;
this.status = status;
this.numberOfDealers = numberOfDealers;
this.tenant = tenant;
this.environment = environment;
}
/*getters and setters here*/
}
package com.dasburo.model;
import com.fasterxml.jackson.annotation.JsonProperty;
import javax.persistence.*;
import java.util.List;
@Entity
//@Table(uniqueConstraints = {@UniqueConstraint(columnNames = {"market", "brand"})})
public class Tenant {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "tenant_id")
private Long tenantId;
private String market;
private String brand;
public Tenant() { }
public Tenant(String market, String brand) {
this.market = market;
this.brand = brand;
}
/*getters and setters here*/
}
for (Import anImport : imports) {
importDao.save(anImport);
}