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

有没有办法在多对一关系中共享类的复合主键?

赏高格
2023-03-14

我有两个类 TempResult 和 结果,它们之间需要多对一。临时收割有一个复合键。结果还需要 TempResult 的复合键中的所有属性(一个属性除外)作为其主键。

在TempResult中包含@ManyTone的情况下,如果在@JoinColumn中设置了insertable=false和Updateable=false,则表结构完全正常。但它不允许在TempResult表中创建新条目。如果未包含,则会出现重复列的错误。

这是我的班级的样子。

我尝试了不将insertable和updatable设置为false,但是这些列重复出现并出现错误。

@Entity
@Table(name = "tempResult")
public class TempResult {

    @EmbeddedId
    private TempIdentity tempIdentity;

    @Convert(converter = BooleanConverter.class)
    @Column(name = "attendance",nullable = false)
    private boolean attendance;

    @Column(name = "marks")
    private int marks;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "registrationNo",insertable=false,updatable = false),
            @JoinColumn(name="courseId",insertable=false,updatable = false),
            @JoinColumn(name="year",insertable=false,updatable = false),
            @JoinColumn(name="semester",insertable=false,updatable = false)
    })
    Result result;


}
//Composite id class
@Embeddable
public class TempIdentity implements Serializable {

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

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

        @NotNull
        @Column(name = "year")
        private int year;

        @NotNull
        @Column(name = "semester")
        private int semester;

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "userId",referencedColumnName = "userId")
        User user;
}

结果表中需要除 userId 之外的所有属性。

@Entity
@Table(name="result")
public class Result {

    @EmbeddedId
    private ResultIdentity resultIdentity;

    @NotNull
    private int marks;
}

//结果表的复合键

@Embeddable
public class ResultIdentity implements Serializable {

    private String registrationNo;

    private String courseId;

    private int year;

    private int semester;


Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`rms_db`.`#sql-113c_95`, CONSTRAINT `FKa683jvhkm50n035ib6ojqlbu7` FOREIGN KEY (`registration_no`, `course_id`, `year`, `semester`) REFERENCES `result` (`course_id`, `registration_no`, `semeste)

我需要将数据插入到TempResultTable.But这是预防。有人能帮忙吗???

共有1个答案

冯宪
2023-03-14

我看到的一件事是,类ResultIdity没有为所有字段注释@Col列。可能必须以这种方式重写

@Embeddable
public class ResultIdentity implements Serializable {

@Table("registration_no")
private String registrationNo;

@Table("course_id")
private String courseId;

@Table("year")
private int year;

@Table("semester")
private int semester;

如果没有@Table注释,Hibernate无法理解这些字段链接到列。您可以更改代码重新测试吗?

 类似资料:
  • 我在Java /Android测试Cordova插件,我需要初始化我的插件类,并在运行测试之前设置一些状态。 我想为每个公共函数创建一个测试套件/Java类,但我不想每次都重复该代码。 有没有办法在测试套件之间共享每个之前?我找到了Class规则,但我认为我没有做我需要的(或者我理解错了...我真的是Java新手) 在Typescript中,我们可以与多个套件共享beforeach函数,每个套件都

  • 问题内容: 问题 首先,我想知道我的数据库结构很糟糕,但是目前我无法更改它。 话虽这么说,我需要在Hibernate(4.2.1)中创建一对多的双向关系,该关系不涉及主键(关系的“父”侧仅包含唯一键)并且不涉及联接表。表示这种关系的外键是从“子”到“父”的反向指针(请参见下文)。我已经搜索并尝试了各种不同的注释配置,但是没有运气。我要的是可能的吗? 数据库 GLOBAL_PART PART_REL

  • 问题内容: 来自目标C的您可以在2个对象之间调用函数以使它们维护一个引用,如果在运行时您不希望在删除该对象的引用之前也不要破坏该对象的话,这会很方便。迅捷有与此类似的东西吗? 问题答案: 这是一个从jckarter的答案衍生而来的简单但完整的示例。 它显示了如何向现有类添加新属性。它通过在扩展块中定义计算属性来实现。计算的属性存储为关联的对象: 编辑: 如果需要支持获取未初始化属性的值并避免发生错

  • 问题内容: 我知道您可以通过执行 node.requestFocus(); 来将焦点集中在javafx中的一个节点上 。 但是有没有办法从javafx中的节点上夺走焦点或阻止对某个对象的焦点? 问题答案: 我不认为有任何保证将始终有效,但是您可以尝试将焦点设置为本质上不接受键盘输入的内容(例如布局窗格):

  • 我试图在java中使用Hibernate和TypedQuery。 我试图调用的方法有一个签名 我想像bellow一样调用它,但是用一个真实的实例替换null。 上面的代码经过编译,但显然带有空指针异常。 如果我对擦除的理解是正确的,那么只要我得到类对象的一个实例,这就行了,因为所有泛型类型信息在运行时都会丢失。 是否有任何方法,我可以得到一个类的实例,我可以分配给变量cls,使这个代码将工作?

  • 问题内容: 我有一个整数数组列表。我需要找到两者之间的共同点。我能想到的是 两个列表 中“ 通用”元素中列出的内容 的扩展 数组中也没有重复项。 有没有直接的方法可以做到这一点? 问题答案: 您可以将列表转换为集合,然后使用方法在不同集合之间进行交集。与所有集合相交后,剩下的就是公共元素,可以将结果集合转换回列表。