Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate Jpa:存储由实体组成的值对象集合 @实体 课堂提问{ @身份证 私有int-id; 私有字符串文本; @独身癖 设置回答选项; } 类应答选项{ 私有字符串选项; @许多酮 私人问题; } 表列: 问题:id,文本 回答选项:问题编号,选项 例子: 问题:你来自哪个县? 可能的答案:肯特,埃塞克斯,米德尔塞克斯,其他 预期api用途: 问题q=新问题(“你来自哪个县?”); q、 添加应答选项(新应答选项(“肯特”)) q、 添加应答选项(新应答选项(“Essex”)) q、 添加应答选项(新应答选项(“米德尔塞克斯”)) q、 添加应答选项(新应答选项(“其他”)) 保存(q); 我不需要回答选项的标识符,因为我认为应答选项是一个值对象。由于我不确定AnswerOption类使用的注释,有人能推荐如何使用JPA持久化这个模型吗_Hibernate_Jpa_Orm - Fatal编程技术网

Hibernate Jpa:存储由实体组成的值对象集合 @实体 课堂提问{ @身份证 私有int-id; 私有字符串文本; @独身癖 设置回答选项; } 类应答选项{ 私有字符串选项; @许多酮 私人问题; } 表列: 问题:id,文本 回答选项:问题编号,选项 例子: 问题:你来自哪个县? 可能的答案:肯特,埃塞克斯,米德尔塞克斯,其他 预期api用途: 问题q=新问题(“你来自哪个县?”); q、 添加应答选项(新应答选项(“肯特”)) q、 添加应答选项(新应答选项(“Essex”)) q、 添加应答选项(新应答选项(“米德尔塞克斯”)) q、 添加应答选项(新应答选项(“其他”)) 保存(q); 我不需要回答选项的标识符,因为我认为应答选项是一个值对象。由于我不确定AnswerOption类使用的注释,有人能推荐如何使用JPA持久化这个模型吗

Hibernate Jpa:存储由实体组成的值对象集合 @实体 课堂提问{ @身份证 私有int-id; 私有字符串文本; @独身癖 设置回答选项; } 类应答选项{ 私有字符串选项; @许多酮 私人问题; } 表列: 问题:id,文本 回答选项:问题编号,选项 例子: 问题:你来自哪个县? 可能的答案:肯特,埃塞克斯,米德尔塞克斯,其他 预期api用途: 问题q=新问题(“你来自哪个县?”); q、 添加应答选项(新应答选项(“肯特”)) q、 添加应答选项(新应答选项(“Essex”)) q、 添加应答选项(新应答选项(“米德尔塞克斯”)) q、 添加应答选项(新应答选项(“其他”)) 保存(q); 我不需要回答选项的标识符,因为我认为应答选项是一个值对象。由于我不确定AnswerOption类使用的注释,有人能推荐如何使用JPA持久化这个模型吗,hibernate,jpa,orm,Hibernate,Jpa,Orm,谢谢。我想说的是,把你的答案选项类也作为实体 @Entity class Question{ @Id private int id; private String questionText; @OneToMany Set<AnswerOption> answerOptions; } class AnswerOption{ private String option; @ManyToOne private Quest

谢谢。

我想说的是,把你的
答案选项
类也作为实体

@Entity
class Question{
    @Id
    private int id;
    private String questionText;

    @OneToMany
    Set<AnswerOption> answerOptions;
}

class AnswerOption{
    private String option;

    @ManyToOne
    private Question question;
}

table-columns:
Question: id, text 
AnswerOption: question_id, option

example:
Question: Which county are you from?
Possible answers: Kent, Essex, Middlesex, Others


Intended api usage:
Question q = new Question("Which county are you from?");
q.addAnswerOption(new AnswerOption("Kent"))
q.addAnswerOption(new AnswerOption("Essex"))
q.addAnswerOption(new AnswerOption("Middlesex"))
q.addAnswerOption(new AnswerOption("Others"))
questionDao.save(q);
Question
类中的
oneToMany
映射更改为使用
CASCADE
选项,如下所示:

@Entity
class AnswerOption{
   private String option;

   @ManyToOne
   private Question question;
 }
 @Entity
 class Question{

    @Id
    private int id;
    private String questionText;

    @OneToMany(cascade = CascadeType.ALL, mappedBy="question")
    Set<AnswerOption> answerOptions;
 }
 //get your hibernate session
 Session session = ....
 Question q = new Question("Which county are you from?");
 q.addAnswerOption(new AnswerOption("Kent"))
 q.addAnswerOption(new AnswerOption("Essex"))
 q.addAnswerOption(new AnswerOption("Middlesex"))
 q.addAnswerOption(new AnswerOption("Others"))

 //use session to save the Question with AnswerOptionss
 session.save(q);
确保您的
addAnswerOption
方法位于
Question
中,如下所示:

@Entity
class AnswerOption{
   private String option;

   @ManyToOne
   private Question question;
 }
 @Entity
 class Question{

    @Id
    private int id;
    private String questionText;

    @OneToMany(cascade = CascadeType.ALL, mappedBy="question")
    Set<AnswerOption> answerOptions;
 }
 //get your hibernate session
 Session session = ....
 Question q = new Question("Which county are you from?");
 q.addAnswerOption(new AnswerOption("Kent"))
 q.addAnswerOption(new AnswerOption("Essex"))
 q.addAnswerOption(new AnswerOption("Middlesex"))
 q.addAnswerOption(new AnswerOption("Others"))

 //use session to save the Question with AnswerOptionss
 session.save(q);

如果您已经有了OO模型,那么您就有了它的持久性(JPA的目的是使工作自动化)。现在,真正的问题是什么?正如您所看到的,我没有用相关的JPA注释标记AnswerOption类,因为我不确定如何用JPA存储值对象。我相信您的解决方案会起作用。但我认为AnswerOption不应该成为一个实体。这也必然与问题的生命周期有关。谢谢回复。我想,
AnswerOption
也是一个包含
question\u id
option
列的表格。为什么你认为它不应该是一个实体?如果您注意到,在处理示例中,您只处理
问题
,即
会话。保存(问题)
回答选项
由内部处理。同样,您可以仅使用
question
执行
update
delete
retrieve
。这是一个简单的
父子
场景,其中
question
是父表,
AnswerOption
是子表。众所周知,没有父母,孩子就无法生存。这也可以通过在
AnswerOtption
表中的
question\u id
上定义
foreign key
,并在
question
表中定义
id
列来实现。存在父子关系。但子对象是一个不需要标识()的值对象。如果我没有使用hibernate来保存这个模型,我可以很容易地在没有id列的情况下保留AnswerOption?如果将
AnswerOtption
映射为子实体,则可以单独管理
AnswerOtption
或管理
AnswerOtption
以及
Question
假设
id
AnswerOtption
中为空。