Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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 使用多通关系定义创建复合ID_Java_Hibernate_Many To One - Fatal编程技术网

Java 使用多通关系定义创建复合ID

Java 使用多通关系定义创建复合ID,java,hibernate,many-to-one,Java,Hibernate,Many To One,Hibernate需要我的实体的ID: (抛出org.hibernate.AnnotationException:未为实体指定标识符) 下面是父实体: @Entity @Table(name = "PARENT") public class ParentDb { @Id @Column(name = "INNER_ID") @GeneratedValue(strategy = GenerationType.AUTO, generator = "G1") @Sequ

Hibernate需要我的实体的ID:

(抛出org.hibernate.AnnotationException:未为实体指定标识符)

下面是父实体:

@Entity
@Table(name = "PARENT")
public class ParentDb {
    @Id
    @Column(name = "INNER_ID")
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "G1")
    @SequenceGenerator(name = "G1", sequenceName = "SOME_SEQ")
    private long id;

    @Column(name = "TIMESTAMP")
    private long timestamp;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "parent", cascade = {CascadeType.ALL}, orphanRemoval=true)
    private List<ChildDb> children;
}
@实体
@表(name=“PARENT”)
公共类ParentDb{
@身份证
@列(name=“internal_ID”)
@GeneratedValue(策略=GenerationType.AUTO,generator=“G1”)
@SequenceGenerator(name=“G1”,sequenceName=“SOME_SEQ”)
私人长id;
@列(name=“TIMESTAMP”)
私有长时间戳;
@OneToMany(fetch=FetchType.EAGER,mappedBy=“parent”,cascade={CascadeType.ALL},orphanRemoving=true)
私人名单儿童;
}
但是,id应该是复合的-父id和名称


如何定义这一点?

我相信这样做会奏效:

@Entity
@Table(name = "CHILDREN")
public class ChildDb implements Serializable{

@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "INNER_ID", nullable = false)
private ParentDb parent;

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

@Column(name = "VALUE")
private double value;

}在我看来,你做的奇怪事情可能是:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "INNER_ID", nullable = false)
private ParentDb parent;

你的孩子身上也有“内在身份证”吗。在一对一关系中,@many单方必须是外键的所有者。

为什么您认为这会起作用?你能指出一些文件吗?也许做这件事的教程没用。当我将@Id注释添加到父变量时,我得到了以下错误:
原因:org.hibernate.AnnotationException:mappedBy reference一个未知的目标实体属性:ParentDb.ChildDb.parent in ParentDb.children
@AlikElzin kilaka我认为您的问题可能在关系的另一边,你能用ParentDb定义更新你的问题吗?@Skizzo-我在问题中添加了家长的定义。你说的“外键所有者”是什么意思?你是如何拥有外键的?我已经用父项的外观更新了这个问题。如果你展示了数据库结构,我对内部ID也有同样的理解,因为你使用的是boy端的“内部ID”列
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "INNER_ID", nullable = false)
private ParentDb parent;