Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA-辅助表映射方向_Java_Hibernate_Jpa - Fatal编程技术网

Java JPA-辅助表映射方向

Java JPA-辅助表映射方向,java,hibernate,jpa,Java,Hibernate,Jpa,我有两张桌子: 创建表签入( ID int主键, 富瓦查尔(100), 巴尔·瓦尔查尔(100), FK_type int外键引用类型(ID) ) 创建表类型( ID int主键, 类型varchar(100) ) 因为辅助表只存储标签,所以我想将这些值直接映射到我的实体中。我想应该可以使用@SecondaryTable @Table(name=“签入”) @SecondaryTable(name=“Type”, pkJoinColumns=@PrimaryKeyJoinColumn(name

我有两张桌子:

创建表签入(
ID int主键,
富瓦查尔(100),
巴尔·瓦尔查尔(100),
FK_type int外键引用类型(ID)
)
创建表类型(
ID int主键,
类型varchar(100)
)
因为辅助表只存储标签,所以我想将这些值直接映射到我的实体中。我想应该可以使用@SecondaryTable

@Table(name=“签入”)
@SecondaryTable(name=“Type”,
pkJoinColumns=@PrimaryKeyJoinColumn(name=“FK_type”,referencedColumnName=“ID”)
)
类签入{
@身份证
私有整数id;
私人字符串foo;
私人弦杆;
@列(name=“FK_type”,table=“type”)
私有字符串类型;
}
不幸的是,@SecondaryTable注释的工作方式似乎与此相反,这意味着它希望我的实际主数据表中列最多的数据表成为连接的数据表。所以我被抛出了错误

Invalid column name 'FK_type'.

有没有办法通过不同的注释来解决这个问题,或者我真的需要以另一种方式构建整个构造,并让主实体引用“Type”和“Chekin”作为辅助表?

您应该在签入时连接Type实体:

class Checkin {
      @Id
      private Integer id;
    
      private String foo;
      private String bar;
    
      @OneToOne(cascade = CascadeType.ALL)
      @JoinColumn(name = "type_id", referencedColumnName = "id")
      private Type type;
    }
请尝试更正此问题:

@列(name=“FK_type”,table=“type”)
私有字符串类型;
为此:

@列(name=“type”,table=“type”)
私有字符串类型;
Type
没有
FK_Type
列,因为我知道您想在这里使用
Type.Type


另外,如果这是对PK的引用,您可以省略使用
referencedColumnName

这是我首先要避免的。显然可以使用getter返回实际字符串,但这会产生副作用,因为我们使用了lombok,所以加载值而不是将整个内容映射为实体将是理想的(我不知道)并不能解决问题。PkJoinColumn注释中的FK_类型引发异常(com.microsoft.sqlserver.jdbc.SQLServerException:Invalid column name'FK_type'),从PkJoinColumn的文档判断,这似乎是合乎逻辑的。名称定义为“当前表的主键列的名称”ReferenceColumnName要联接到的表的主键列的名称。因此,我的假设是——如原始post中所述——辅助表应该有一个对主表的外键引用。但在我的用例中没有多大意义。。。