Java JPA:@ManyToOne,1个表中不必要的重复条目

Java JPA:@ManyToOne,1个表中不必要的重复条目,java,mysql,spring,jpa,Java,Mysql,Spring,Jpa,我有一个dealersearch,其中分销商是持久的。经销商的街道、姓名、电话号码等数据将通过excel文件以某种方式导入 在我的数据库中,我需要有关经销商数据导入的元数据。 我使用弹簧启动机jpa 我的模型: 导入(导入[-process]本身的元数据) 日期时间 状态(成功/失败) 进口经销商数量 承租人(哪个品牌/国家的经销商,例如美国的大众汽车) 环境(哪些服务器:生产、测试、开发) 房客 品牌(奥迪、大众、座椅) 市场(经销商所在国家/地区) 导入和租户已连接。每个导入包含一个

我有一个dealersearch,其中分销商是持久的。经销商的街道、姓名、电话号码等数据将通过excel文件以某种方式导入

在我的数据库中,我需要有关经销商数据导入的元数据。

我使用弹簧启动机jpa

我的模型: 导入(导入[-process]本身的元数据)

  • 日期时间
  • 状态(成功/失败)
  • 进口经销商数量
  • 承租人(哪个品牌/国家的经销商,例如美国的大众汽车)
  • 环境(哪些服务器:生产、测试、开发)
房客

  • 品牌(奥迪、大众、座椅)
  • 市场(经销商所在国家/地区)
导入和租户已连接。每个导入包含一个租户。一个租户Id在导入表中多次出现。由品牌和市场/国家/地区组成的租户表中的每个租户都应该是唯一的

数据行示例,它应该是什么样的

进口 id-日期时间-环境-经销商数量-状态-租户id

  • 2016-04-17-开发-122-成功-1
  • 2016-04-17-开发-40-成功-2
  • 2016-04-19-开发-130-失败-1
  • 2016-04-22-现场-1044-成功-3
  • 房客 租户识别号-品牌-市场

  • 阿科尔
  • A-精氨酸
  • A-美国
  • 实际情况如何

    房客 租户识别号-品牌-市场

  • 阿科尔
  • A-精氨酸
  • 阿科尔
  • A-美国
  • 关系正确,但租户有重复项,KOR输入了两次

    我的Java模型

    导入是一个包含数据的导入对象数组,包括租户


    使用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);
    }