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

自动生成 JPA 表映射的列名

漆雕皓轩
2023-03-14

我正在尝试使用@ManyToOne和@OneToMany映射实体表。映射列位于名为“internal_plan_id”的子表中。根据要求,我不能更改名称。下面是两个实体表:父表

import java.sql.Timestamp;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Entity
@Getter
@Setter
//@Data
@NoArgsConstructor
@Table(name = "financial_plan_details", schema = "financialplanadmin")
public class FinancialPlanDao {

  // This internalId is the primary key of the table.
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "internal_plan_id")
  private int internalId;

  // This stores the plan status into the database table.
  @Column(name = "plan_status")
  @Size(max = 10)
  private String planStatus;

  @Column(name = "presentation_file_key")
  @Size(max = 500)
  private String presentationFileKey;

  @Column(name = "create_timestamp")
  @NotNull
  private Timestamp createdTimestamp;

  @OneToMany(mappedBy = "financialPlan")
  private List<FinancialSubPlan> subPlans;
}

儿童桌:

@Entity
@Getter
@Setter
@NoArgsConstructor
@Table(name = "financial_plan_subplan", schema = "financialplanadmin")
@JsonInclude(Include.NON_NULL)
public class FinancialSubPlan {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "subplan_id")
  private int subPlanId;
  
  @Column(name = "external_subplan_id")
  private String externalSubplanId;

  @Column(name = "is_chosen")
  private Boolean subPlanIsChosen;
    
  @ManyToOne
  @JoinColumn(name = "internal_plan_id")
  private FinancialPlanDao financialPlan; 
}

我得到错误为:错误:关系“financial_plan_subplan”的列“internal_plan_id_internal_plan_id”不存在。

financial_subplan中用于映射的现有列名是“internal_plan_id”。上述名称“internal_plan_id_internal_plan_id”是自动生成的。那么有没有办法将其减少到只有“internal_plan_id”。

共有1个答案

公孙智
2023-03-14

问题在于设置映射类的值。形成父类后的第一件事是将父类设置为子类,即subPlans.set(financialPlan)。然后,我们必须将子类设置为父类,即financialPlan。设置(子计划列表)。我错过了把父母变成孩子的过程。

您还可以参考这个带有Spring Boot的JPA/Hibernate One到多个映射示例

在此,您可以看到,在创建 Post 对象之后,Comment 对象设置 Post 对象,之后 Post 对象设置注释对象,然后再将其保存到数据库中。

 类似资料:
  • 主要内容:列表映射实例,程序输出结果,以下是纠正/补充内容:列表(List)是一个用于基于索引插入和删除元素的接口。当需要以用户定义的顺序检索元素时,可以使用它。 列表映射实例 在这个例子中,我们将一个对象嵌入到一个实体类中,并将其定义为一个集合类型 - 。 这个例子包含以下步骤 - 第1步: 在包下创建一个实体类,这个类包含员工, 和嵌入对象(员工地址)。注解 表示嵌入对象。 文件:Employee.java 的代码如下所示 - 第2步: 在包下创建一个

  • 问题内容: 我有一个带有四列ID,名称,颜色,形状的食用水果。 该表中的条目为: 现在,我将一个实体类Fruit映射到上表。 在我的DAO类中,代码是: 显而易见,在上面的查询中运行将返回3行。 我有一个简单的TO类FruitSearchTO 此TO符合我的查询返回的行。 但是在我的DAO中运行类似: 抛出异常java.lang.ClassCastException:[Ljava.lang.Obj

  • 问题内容: 我的主键实体如下所示 当我跑步时,出现错误 无法获取或更新下一个值;嵌套的异常是org.hibernate.exception.SQLGrammerException:无法获取或更新下一个值 但是当我改变为 没有错误抛出。我想在 oracle db 上为每个表生成唯一的主键。 问题答案: 当将新创建的实体插入数据库时,告诉JPA提供者使用表从中获取ID。 当使用Hibernate作为提

  • 我有一个实体,看起来像这样: 输入数据是一个

  • 我的属性与问题相关: 谢谢,伙计