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问题。你不认为我知道我在说什么吗?