页面实体。

@Entity
@Table(name = "pages", schema = "admin")
public class Page implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true)
    private Integer id;

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


    @ManyToOne(targetEntity = Partition.class, fetch = FetchType.LAZY)
    private Partition partition;

    @Column(name = "is_startable")
    private Boolean isStartable;

    @Column(name = "priority")
    private Integer priority;

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

    @OneToMany(mappedBy = "page", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private List<Permission> permissions;

    @Column(name = "link", unique = true)
    private String link;


PageRepository

    List<Page> findByPermissionsGroupsOrderByPartitionNameAscNameAsc(@Param(value = "group") Group group);


PageServiceImpl

    @Override
public Collection<Page> getAccessedPages(Group group) {
    try {
          List<Page> pages = pageRepository.findByPermissionsGroupsOrderByPartitionNameAscNameAsc(group);
        return pages;
    } catch (Exception ex) {
        logger.error("getPage error", ex);
        return null;
    }
}


getAccessedPages返回真实的页面实体列表(不为null),但是实体中的所有字段均为null。

为什么?

最佳答案

刚才我也遇到了这个问题,它看起来像spring数据做了某种惰性实例化。
因此,如果您未在交易内部访问此字段,则它们将保留为null。在调用此请求的方法上添加注释@Transactional,将解决问题。

关于java - Spring JPA存储库方法在查询后不设置实体的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27485288/

10-11 20:41
查看更多