当前位置: 首页 > 知识库问答 >
问题:

使用非主键的JPA一对一给出了无法找到具有逻辑名称错误的列

卜昂熙
2023-03-14
CREATE TABLE currency (
    id bigint NOT NULL PRIMARY KEY,
    entity_id VARCHAR(255) NOT NULL UNIQUE,
    code VARCHAR(255),
    name VARCHAR(255),
    description VARCHAR(255),
    denomination_code VARCHAR(255),
    denomination_name VARCHAR(255),
    denomination_description VARCHAR(255),
    denomination_units integer,
    status VARCHAR(255)
);

currency_pair的DDL

CREATE TABLE currency_pair (
    id bigint NOT NULL PRIMARY KEY,
    entity_id VARCHAR(255) NOT NULL UNIQUE,
    code VARCHAR(50) NOT NULL,
    name VARCHAR(250) NOT NULL,
    description VARCHAR(500) NOT NULL,
    base_currency_id VARCHAR(255) NOT NULL REFERENCES currency(entity_id),
    quote_currency_id VARCHAR(255) NOT NULL REFERENCES currency(entity_id),
    status VARCHAR(255),
);

我的实体类如下:-

货币实体-

@Entity
@Table(name = "currency")
public class Currency implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NaturalId
    @Column(nullable = false)
    private String entityId;

    @Column(nullable = false)
    private String code;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String description;

    @Column(nullable = false)
    private String denominationCode;

    @Column(nullable = false)
    private String denominationName;

    @Column(nullable = false)
    private String denominationDescription;

    @Column(nullable = false)
    private Integer denominationUnits;

    @Column(nullable = false)
    private String mask;

    @Column(nullable = false)
    private String status;

    /* getters and setters */
}
@Entity
@Table(name = "currency_pair")
public class CurrencyPair implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NaturalId
    @Column(nullable = false)
    private String entityId;

    @Column(nullable = false)
    private String code;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String description;

    @OneToOne
    @JoinColumn(name = "base_currency_id", referencedColumnName = "entity_id")
    private Currency baseCurrency;

    @OneToOne
    @JoinColumn(name = "quote_currency_id", referencedColumnName = "entity_id")
    private Currency quoteCurrency;

    @Column(nullable = false)
    private String status;

    /* Getters and setters */
}

注意:我无法更改ddl查询,那么我可以做什么来修复实体类

共有1个答案

谭鹏云
2023-03-14

因为在currencypair中有referencedColumnName=“entity_id”,它与货币有关系。在货币中,名称是entityId,与Entity_ID不匹配。您可以在currency中添加name属性,如下所示

改变

@NaturalId
@Column(nullable = false)
private String entityId;

@NaturalId
@Column(name = "entity_id", nullable = false)
private String entityId;
 类似资料:
  • 问题内容: 您好我的表格如下: 1- medical_company : account_entity* 表 account_entity_id 列上的medical_company_id 外键 (不是pk) *** 第1栏 专栏2 第三栏 2- account_entity : account_entity_id (pk) 第1栏 专栏2 第三栏 3 人同行: person_id (pk) 第1

  • 有两个表。酒店内的地址。我已经提到了OneTo很多关系。但是编译器抛出错误。 创建名为entityManagerFactory的bean时出错,该bean在类路径资源[org/springFramework/boot/autoconfiure/orm/jpa/HibernateJpaConfiguration.class]中定义:调用init方法失败;嵌套异常org.hibernate.Mappi

  • 问题内容: 我有5个表,每个表与下一个表有一对多的关系 。project_t-> project_level1_t-> project_level2_t-> project_level3_t-> project_level4_t 我想让用户hibernate这些表 和project_level1_t 和project_level2_t 这是存储库文件 和 和 但是当我运行我的应用程序时,出现此错误

  • 我的服务类 和我的控制器类:

  • 我在将OneToMany外键映射到复合主键时遇到问题。我已经尝试过很多解决方案,包括这个post@onetomany和复合主键?。 所以情况是: 因此,在Box实体中,我试图在Box和Color实体之间创建一个OneToMany映射。为此,我应该使用Color实体的复合主键吗?如果我试图将列连接到复合主键(就像我在Box实体中所做的那样),我确实会得到一个错误-无法定位逻辑列“locale”。 我

  • 我正在处理遗留系统,需要从数据库中读取一些信息。下面是表格关系 供应商(vendorid-pk,vendorEid,name) VendorContactBridge(bridgeid-pk,vendorEid,contactEid) 联系人(contactid-pk,contactEid,phone) vendorEid和contactEid不是表的主键,但用作联接表VendoContactBr