gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:19:07 25 4
gpt4 key购买 nike

我有一个经销商搜索,其中保留了经销商。经销商的街道、姓名、电话号码等数据将通过 excel 文件以某种方式导入。

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

我使用 spring-boot-starter-jpa

我的模型:

导入(导入 [-process] 本身的元数据)

  • 日期时间
  • 状态(成功/失败)
  • 导入的经销商数量
  • 租户(哪个品牌/国家/地区的经销商,例如美国的大众汽车)
  • 环境(什么服务器:生产、测试​​、开发)

租户

  • 品牌(奥迪、大众、西雅特)
  • 市场(分销商所在的国家/地区)

导入和租户连接。每个导入包括一个租户。一个租户 Id 在 Import 表中多次出现。由品牌和市场/国家/地区组成的租户表中的每个租户都应该是唯一的。

数据行示例,应该如何:

导入

id - datetime - environment - numberOfDealers - status - tenant_id

  1. 2016-04-17 - 开发 - 122 - 成功 - 1
  2. 2016-04-17 - 开发 - 40 - 成功 - 2
  3. 2016-04-19 - 开发 - 130 - 失败 - 1
  4. 2016-04-22 - 上线 - 1044 - 成功 - 3

租户

tenant_id - 品牌 - 市场

  1. 韩语
  2. A - ARG
  3. A - 美国

实际情况如何:

租户

tenant_id - 品牌 - 市场

  1. 韩语
  2. A - ARG
  3. 韩语
  4. A - 美国

关系是正确的,但是Tenant有重复,输入了两次KOR

我的 Java 模型

@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);
}

imports 是一组 Import 对象,其中填充了数据,包括租户

使用 uniqueConstraints 注释只会设置表“Tenant”的结构,但不会设置行为。 JPA 仍然尝试在“租户”表中进行重复条目。

最佳答案

好吧,首先,如果您正在加载一个已经存在的模式并基于现有表创建实体,那么当重复发生时,您的模式中存在的唯一约束应该会导致异常。但是,如果您从实体创建表,那么您不能完全依赖注释来强制执行唯一约束,如 JPA wikibooks 中所述:

Some expect the JPA provider to have magic that automatically maintains relationships. This was actually part of the EJB CMP 2 specification. However the issue is if the objects are detached or serialized to another VM, or new objects are related before being managed, or the object model is used outside the scope of JPA, then the magic is gone, and the application is left figuring things out, so in general it may be better to add the code to the object model. However some JPA providers do have support for automatically maintaining relationships.

关于java - JPA:@ManyToOne,1 表中不必要的重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37214944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com