如何使用休眠延迟加载列可以为空

Tom*_*lly 2 java spring hibernate jpa spring-data-jpa

这是我的实体:

@Entity
@Table(name = "users")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "name")
private String name;

@Column(name = "surname")
private String surname;


@ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.MERGE)
@JoinColumn(name = "id_city")
private City city;
//...

}
Run Code Online (Sandbox Code Playgroud)

在我的存储库中我有:

public interface UserRepository extends JpaRepository<User, Long>{

@Query("SELECT u FROM User u JOIN FETCH u.city")
public List<User> findAllUserForApi();

}
Run Code Online (Sandbox Code Playgroud)

如果表中有任何城市,findAllUserForApi()则显示有关用户的完整信息:

[{"id":1,"name":"John","surname":"Pillman","city":{"id":1,"name":"New York"}]
Run Code Online (Sandbox Code Playgroud)

如果没有城市,我至少想得到[{"id":1,"name":"John","surname":"Pillman","city":null] 但我什么也没有:[]

请帮帮我。

小智 5

鉴于您已经在使用自定义查询,最简单的解决方案是LEFT JOIN FETCH @Query("SELECT u FROM User u LEFT JOIN FETCH u.city") 这样所有用户都将被加载,无论他们是否有城市;对于那些拥有城市的人,可以通过 获得user.getCity()