我遇到过一种情况,我必须在两个表之间建立多对一关系,前提条件如下:
表A:
-----primary_key_a------------column_a--------column_x---------
例子:
--------1----------------------------2050--------ABC
--------2----------------------------2050--------AAA
--------3----------------------------9090--------ABC
------4----------------------------9090--------AAA
表 B:
-----primary_key_B------------column_B--------column_C------------
例子:
------2050----------------------------SSS--------KKK
------2090----------------------------YYY--------KKK
如两个表所示,primary_key_B 和column_a 具有相同的值,但在现有表中,它们具有不同的列名(表B 的primary_key_B 和表A 的column_a)。在现有记录中,有些情况下 primary_key_B 的某些值可能不在 column_a 中,反之亦然,但我们希望进一步填充它
我现有的 table_a 和 table_b 的 POJO 如下:
@Entity
public class PojoForA
{
@Id
@Column(name = "primary_key_a")
private Integer id;
@Column(name = "column_a")
private String b;
@Column(name = "column_x")
private String c;
//getter/setters
}
@Entity
public class PojoForB
{
@Id
@Column(name = "primary_key_B")
private Integer idB;
@Column(name = "column_b")
private String b;
@Column(name = "column_c")
private String c;
//getter/setters
然后我在 Pojo A 中为多对一映射添加了以下更改:
@Entity
public class PojoForA
{
@Id
@Column(name = "primary_key_a")
private Integer id;
@Column(name = "column_a")
private String b;
@Column(name = "column_x")
private String c;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "idB",nullable=false,referencedColumnName = "primary_key_B")
//getter/setters
它没有建立我想要建立的关系。表A已经有不同名称但数据相同的列作为表B的主键。 当我尝试运行时,出现以下错误:
Caused by: org.h2.jdbc.JdbcSQLException: Column "tablea0_.primary_key_B" not found; SQL statement:.........
org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:150)
我该如何解决这个问题?基本上,我不想改变表结构,但 table_a 和 table_b 之间有多对一的关系
最佳答案
您已将 ManoToOne 引用放在表 B 中。首先尝试映射您的实体。我可以在您的日志文件中看到有一列无法识别,名为 primary_key_b 的引用列必须具有表 A 的外键。
在映射中引用的方式是:
@JoinColumn(name = "primary_key_b", referencedColumnName = "column_a")
@ManyToOne(optional = true) // This is because you can have null values I understood.
关于java - 使用现有列添加 ManyToOne 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57205429/