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
Java JPA2使用@OneToMany关系保存实体时出现NullPointerException_Java_Hibernate_Spring Mvc_Jpa 2.0_One To Many - Fatal编程技术网

Java JPA2使用@OneToMany关系保存实体时出现NullPointerException

Java JPA2使用@OneToMany关系保存实体时出现NullPointerException,java,hibernate,spring-mvc,jpa-2.0,one-to-many,Java,Hibernate,Spring Mvc,Jpa 2.0,One To Many,我有两个实体具有@OneToMany关系。问题是在保存过程中,我在getComps()行上得到一个空指针。添加(comp)。如果我显式地实例化comps集,它就可以正常工作。如您所知,如果您有注释,则不需要这样做。我在该实体中还有其他对象,它们在没有显式实例化的情况下工作良好。可能的原因是什么 //Main Method public static void main(String argz[]){ .... Message message = new Message();

我有两个实体具有
@OneToMany
关系。问题是在保存过程中,我在
getComps()行上得到一个空指针。添加(comp)
。如果我显式地实例化
comps
集,它就可以正常工作。如您所知,如果您有注释,则不需要这样做。我在该实体中还有其他对象,它们在没有显式实例化的情况下工作良好。可能的原因是什么

//Main Method    
public static void main(String argz[]){
  ....
  Message message = new Message();
  message.setMessage("Hello World!");
  Comp comp = new Comp();
  comp.setName(getName());
  message.addComp(comp);
  user.createMessage(message);
  User aUser =  userService.save(user);
}

//Message Entity
@JsonIgnore
@OneToMany(targetEntity = Comp.class,
                mappedBy="message",
                fetch=FetchType.LAZY, 
                cascade={CascadeType.All},
                orphanRemoval=true)
private Set<Comp> comps;

public void addComp(Comp comp){
    comp.setMessage(this);
    getComps().add(comp);
}

//Comp Entity       
@JsonIgnore
@JsonBackReference
@ManyToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="message_id")
private Message message;
//Main方法
公共静态void main(字符串argz[]){
....
消息消息=新消息();
setMessage(“你好,世界!”);
Comp Comp=新Comp();
comp.setName(getName());
消息addComp(comp);
user.createMessage(消息);
User aUser=userService.save(用户);
}
//消息实体
@杰索尼奥雷
@OneToMany(目标实体=复合类,
mappedBy=“消息”,
fetch=FetchType.LAZY,
cascade={CascadeType.All},
(删除=真)
私人集资公司;
公共无效添加组件(组件组件){
组件设置消息(本);
getComps().add(comp);
}
//公司实体
@杰索尼奥雷
@JsonBackReference
@manytone(cascade=CascadeType.PERSIST)
@JoinColumn(name=“message\u id”)
私人信息;

异常的原因在代码中

private Set<Comp> comps;
private Set comps;
改为

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "message")
private Set<Comp> comps = new HashSet<Comp>(0);

public Set<Comp> getComps() {
  return this.comps;
}

public void setComps(Set<Comp> comps) {
  this.comps = comps;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“message”)
私有集comps=新哈希集(0);
公共集getComps(){
返回此.comps;
}
公共无效集合组件(集合组件){
this.comps=comps;
}

显示您正在执行的代码。您的期望可能是错误的。我已经包括了我用于测试的测试方法。如上所述,回答这样的问题不需要熟悉Hibernate。您正在实例化一个Comp集为null的消息,然后尝试将Comp添加到此集中。Hibernate与您的错误无关。不能对空引用调用方法,仅此而已。你应该接受罗曼的回答。看一看“私人收款单”这行,你看到实例化了吗?tinyurl.com/kom3hfrNo。那又怎么样?冬眠不是黑色巫毒。将它放在类路径中不允许对空引用调用方法。在您链接到的文章中,您是否看到在使用new对客户进行实例化之后,可以访问订单集合的任何地方?您是否意识到Hibernate不能神奇地初始化它没有创建的对象的字段?为了记录在案,我在这里以2031分回答了1462个Hibernate问题。你不认为我知道我在说什么吗?