为什么jHipster项目在Controller中没有得到LazyInitializationException?

时间:2017-03-09 20:41:55

标签: spring spring-boot spring-data jhipster lazy-initialization

jHispster项目用于避免控制器中的LazyInitializationException的设置是什么?

我的控制器:

 @GetMapping("/citys")
@Timed
public ResponseEntity<List<City>> getAllCidades(@ApiParam Pageable pageable) {
    log.debug("REST request to get a page of Citys");
    Page<City> page = cityService.findAll(pageable);
    HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/citys");
    return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
}

城市实体:

@Entity
@Table(name = "city")
public class Cidade implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
    @SequenceGenerator(name = "sequenceGenerator")
    private Long id;

    @NotNull
    @Column(name = "name", nullable = false)
    private String name;

    @ManyToOne(optional = false)
    @NotNull
    private State state;
...
// gets and sets
}

2 个答案:

答案 0 :(得分:4)

这实际上是一个Spring Boot而不是JHipster选项。具体属性名为spring.jpa.open-in-view。默认情况下为true,这会导致Spring Boot注册OpenEntityManagerInViewInterceptor

来源:Spring Boot properties reference

答案 1 :(得分:1)

As jdubois mentioned 这是正常的&#34;如果您在交易之外访问惰性关系,则使用JPA。

通常,您应该使用带有事务的服务层。例如,UserService类非常适合完成这项工作。

我们剩下的唯一两个选择是:

在视图模式中使用打开会话。我不喜欢它,因为它隐藏了开发人员的问题:他应该正确使用JPA。

让人们正确使用JPA:这就是为什么JHipster不能解决这个问题的原因。通过使用急切关系或使用事务和Spring服务,您可以通过多种方式解决此问题。在我看来,应该如何使用JPA,以及Spring控制器。