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

如何在jpa中连接多个主键或特定主键的列

孙海
2023-03-14
@Entity
@Table(name = "A")
public class A {
    @Id
    @Column(name = "id")
    private Long id;

    @Id
    @Column(name = "name")
    private String name;

    @JoinColumn(name = "test_id")
    private List<Test> testId;
}
@Entity
@Table(name = "Test")
public class Test {
    @Id
    @Column(name = "test_id")
    private Long testId;
}

错误结果为

“OneToOne关系的JPA问题:外键引用的列数错误。应为2”

如何为join测试表指定主键?

表A:列id与表B:列test_id映射

共有1个答案

戚学
2023-03-14

由于您的表a有一个复合键,您应该将列分离到另一个键类中,然后连接到表的键的单独部分。

例如,创建akey

@Embeddable
public class AKey {

    @Column(name = "id")
    private Long id;

    @Column(name = "name")
    private String name;

    //getters and setters
}

然后替换类A中的ID

@Entity
@Table(name = "A")
public class A {
    @EmbeddedId
    private AKey key;

    @JoinColumn(name = "test_id")
    private List<Test> testId;
}

然后可以在test.testid=a.key.id上执行联接

 类似资料:
  • 如何以可伸缩的方式编写连接多个Kafka主题的使用者? 我有一个主题用一个键发布事件,第二个主题用相同的键发布与第一个主题的子集相关的其他事件。我想编写一个订阅这两个主题的使用者,并为出现在这两个主题中的子集执行一些额外的操作。 理想情况下,我需要将主题绑定在一起,以便以相同的方式对它们进行分区,并同步地将分区分配给使用者。我怎么能这么做? 我知道Kafka Streams将主题连接在一起,这样键

  • 问题内容: 我试图弄清楚如何构建JPA实体bean,以使数据适用于我的设备。该数据库是旧的,一成不变的,所以我不能更改架构。设备模型具有复合主键,其中的一列是设备类型的FK。 我尝试了几种不同的方法。首先是设备具有DeviceModel和DeviceType,但是这给了我一个错误,那就是太多的东西在引用dev_type。因此,然后我尝试让DeviceModel引用DeviceType,但遇到了相同

  • 假设您有一个表,如下所示: 可以看到列是表的主键和外键。是的,MySQL成功生成了这个表。 问题很简单,我将如何在JPA实体中映射这一点?我是否应该有映射到列的1个id和连接列的另一个字段?欢迎提出建议。

  • EmbeddedId或IdClass注释用于表示复合主键。如何在没有(EmbeddedId或IdClass)的情况下使用复合主键? 如果可以在没有(EmbeddedId或IdClass)的情况下使用复合主键,那么如何使用EntityManager.find(Entity Class,Object primaryKey)方法在复合主键(Multiple primaryKey)的情况下查找实体(因为没

  • 问题是@ManyToOne@Joincolumn ID_REPORT(它是一个主键)和@Joincolumn ID_TEMPLATE_DEFAULT 实体映射中的重复列:CurReport 列:id_report(应使用插入=“false”更新=“false”进行映射) 代码 第一桌CUR_TEMPLATE 第二个表CUR_REPORTS 第一个表CUR_REPORTS实体当前报表 第二个表CUR

  • 问题内容: 我的JPA模型中有以下类(省略了getters,setters和无关字段): 我需要定义一个类,使得当从所述类生成DDL时,相应的表的主键被由密钥和。我尝试了以下方法: 但这会为表生成以下内容: 请注意,和都是可为空的,当我尝试将DDL加载到SQL Server时会导致以下错误 无法在表“ PRICE”中的可为空的列上定义PRIMARY KEY约束 我不明白为什么这些可以为空,因为在域