gpt4 book ai didi

java - Hibernate 返回 null unilized Collection

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

我有两个表,用户和图像需要连接。 users 表中恰好有一个用户行,而 images 表中有多个图像。

在我的用户 bean 中,我有一个带有 @OneToMany 关系的私有(private) Set 变量,如下所示

//Users.java
@Entity
@Table(name = "users")
@NamedQueries ({
@NamedQuery(name = "Users.getUserImage",
query("from Users as users INNER JOIN fetch users.images as image WHERE users.userId image.userId AND users.userId =: passedId")
})
public class Users
private Set<UserImages> images;

@OneToMany(mappedBy = "userId", fetch = FetchType.LAZY, cascade=CascadeType.ALL)
public Set<UserImages> getImages() {
return images;
}

public void setImages(Set<UserImages> images) {
this.images = images;
}
}

然后我有一个 UserImages bean,它存储一堆数据,但具有看起来像这样的 fk userId。

//UserImages.java

private Integer userId;

@Column(name = "user_id", updatable=true, nullable=false)
public Integer getUserId() {
return userId;
}

public setUserId(Integer userId) {
this.userId = userId;
}

我从 DAO 中调用 getUserImage namedQuery 来获取结果集。

所以这很有效,除非用户在 UserImages 表中没有图像。 (用户尚未上传任何图像)。我已经设置了一个测试来测试所有内容,如果用户有图像,它效果很好,我可以在用户上调用 getImages() 方法,它将返回一个集合,我可以迭代它。但如果用户没有任何图像,它会立即给我一个空指针异常。

如果变量 this.images = null,我尝试在 setUserImages() 方法中将 Set 设置为 null,但这似乎不起作用。任何帮助都会很棒。谢谢!

最佳答案

这不是您在 Hibernate 中执行操作的方式。使用 ORM 的重点是您不必处理外键,而是处理对象引用:

@Entity
public class UserImage{

@ManyToOne
private User user;

public User getUser(){return user;}
public setUser(User user){this.user = user;}

}

@Entity
public class User{

@OneToMany(mappedBy="user")
private Set<UserImage> images;

public void setImages(Set<UserImage> images){this.images=images;}
public Set<UserImage> getImages(){return this.images;}

}
<小时/>

关于查询:不要使用联接。使用这样的东西(我只使用JPA,所以我不确定HQL):

Select i from UserImage i where user = :user and filename like :pattern

将用户对象和模式作为参数传递,并让 hibernate 在内部进行连接。如果您要自己完成这些跑腿工作,那么使用 ORM 是没有用的。

关于java - Hibernate 返回 null unilized Collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4035045/

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