我遇到一种情况,我必须在两个表之间建立多对一关系,前提条件如下:
表A:
-----主键a-----列a-----列x---------
例子:
------2050年ABC
------2050年,美国汽车协会
------三、9090、ABC
------4-------------9090--------AAA级
表B:
-----主键B-----列B-----列C---------
例子:
------2050年——SSS——KKK
------2090年
如两个表中所示,PrimaRyKyKyb和CulnnA A具有相同的值,但在现有表中,它们具有不同的列名(表B的PrimaRyKyb b和表A的柱状A)。在现有的记录中,有些情况下PrimaLyKyKyb的某些值可能不在柱状A中,反之亦然,但我们希望填充它。
我现有的Pojo和Table的Bojo如下:
@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)
我该如何解决这个问题?基本上,我不想更改表结构,但表a和表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/