繁体   English   中英

有没有一种方法可以在多对多关系中共享类的复合主键?

[英]is there a way to share the composite primary key of a class in a many to one relationship?

我有两个类TempResult和Result,它们之间需要多对一。 Tempresult具有复合键。 Result还需要TempResult组合键中的所有属性,但其中一个为其主键。

在TempResult中包含@ManyToOne的情况下,如果在@JoinColumn中设置了insertable = false和updatable = 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)

我需要将数据插入到TempResult表中。 有人可以帮忙吗???

我看到的一件事是类ResultIdentity的所有字段都没有注释@Column。 可能必须以这种方式重写

@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无法理解这些字段是否链接到列。 您可以更改重新测试的代码吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM