我遇到一种情况,我必须在两个表之间建立多对一关系,前提条件如下:
表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/

10-13 05:00