gpt4 book ai didi

java - 当我使用 @collectionId 映射集合时,如何获取 Hibernate 生成的 key ?

转载 作者:行者123 更新时间:2023-12-01 11:39:24 24 4
gpt4 key购买 nike

我正在从事测验管理工作。所有映射都是通过问题到选项的 Hibernate 注释完成的。问题是一个实体,而所有选项都是嵌入对象,因此我映射选项如下:

QuestionMasterDTO 的 TabkidsMCQOptionMasterDTO 映射:

    @ElementCollection(fetch=FetchType.EAGER,targetClass=TabkidsMCQOptionMasterDTO.class)
@Fetch(FetchMode.SUBSELECT)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@CollectionTable(name="TABKIDS_MCQ_OPTION_MASTER",joinColumns={@JoinColumn(name="TMOM_QUESTION_ID")})
@GenericGenerator(name="hilo-gen",strategy="hilo")
@CollectionId(columns={@Column(name="TMOM_ID")},generator="hilo-gen", type=@Type(type="long"))
public Collection<IOptionMaster> getOptions() {
return options;
}

TabkidsMCQOptionMasterDTO 的位置​​:

   @Embeddable
public class TabkidsMCQOptionMasterDTO implements IOptionMaster {

private String optionText;
private boolean correct;


@Column(name = "TMOM_OPTION_TEXT")
public String getOptionText() {
return optionText;
}

@Column(name = "TMOM_IS_CORRECT")
public boolean isCorrect() {
return correct;

}
//setters omitted
}

现在,在上面的映射中,您可以看到我正在使用生成器,即 hilo-gen ,并为集合中可用的每个选项分配一个唯一的 ID,该列名称为“TMOM_ID” >'。

这一行:

@GenericGenerator(name="hilo-gen",strategy="hilo")
@CollectionId(columns={@Column(name="TMOM_ID")},generator="hilo-gen", type=@Type(type="long"))

现在,当我使用 Hibernate 标准从数据库中获取问题时,我将获取与该问题关联的所有选项,但不会获取唯一的选项 ID,即 TMOM_ID。怎么得到这个id??

最佳答案

Hibernate主要使用Entity TypeValue Type两种映射类型。

实体类型意味着它将在世界上有自己的存在,即它必须有一个主键。

虽然值类型没有自己的存在,这意味着值类型始终依赖于实体类型。

正如你的问题,我可以看到选项没有其赢得的存在,因为它必须始终依赖于作为实体的问题。

因此,从我的角度来看,如果您想访问选项 Id,选项也必须是实体类型,这意味着您必须在 TabkidsMCQOptionMasterDTO 之上使用 @Entity,而不是将其设为 @Embeddable

因此,在这里您必须在问题主控中使用 @OneToMany ,而在 TabkidsMCQOptionMasterDTO 的另一端,您必须使用 @ManyToOne 映射。

我希望这将有助于实现您想要的目标。

关于java - 当我使用 @collectionId 映射集合时,如何获取 Hibernate 生成的 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29666254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com