2017-12-02 21 views
0

为了简单起见,事件具有地址,许多事件可以共享相同的地址。所以我有一个ManyToOne关系。Java/Hibernate:非空属性引用空值或瞬态值

活动类(我删除了可读性不相关的代码)

@Entity 
@Table(name = "events") 
public class Event { 

    private Address address; 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "address_id", nullable = false) 
    public Address getAddress() { 
     return this.address; 
    } 
} 

地址类

@Entity 
@Table(name = "adresses") 
public class Address { 

    private Set<Event> events = new HashSet<Event>(0); 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "address") 
    public Set<Event> getEvents() { 
     return this.events; 
    } 


} 

当我取ID为6的事件,并尝试将其删除:

Event e = session.get(Event.class, 6); 
session.delete(e); 

我得到的错误not-null property references a null or transient value : logic.Event.address

但由于地址不初始化它既不瞬态因为我从数据库中检索它,也没有空:

Event e = session.get(Event.class, 6); 
System.out.println(e.getAddress().getAddressId()); //Output is 3, which is correct 

我不知道为什么发生这种情况,大多数人同样的问题试图保存一个暂时的对象,这根本不是我的情况。

+0

*没有设置因为我不需要它* !!但你需要它,所以映射是正确的。 –

+0

@chsdk真的吗???????这是否导致“空”错误?笑 –

+0

是的,这应引起贴图错误,我认为thta就是为什么你得到了'非空属性引用null或瞬时value'。 –

回答

0

拆卸cascade注解我所有的@ManyToOne侧实体解决我的问题。如果有人有解释,请随时评论!

相关问题