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
}
答案 0 :(得分:4)
这实际上是一个Spring Boot而不是JHipster选项。具体属性名为spring.jpa.open-in-view
。默认情况下为true
,这会导致Spring Boot注册OpenEntityManagerInViewInterceptor
。
答案 1 :(得分:1)
As jdubois mentioned 这是正常的&#34;如果您在交易之外访问惰性关系,则使用JPA。
通常,您应该使用带有事务的服务层。例如,UserService类非常适合完成这项工作。
我们剩下的唯一两个选择是:
在视图模式中使用打开会话。我不喜欢它,因为它隐藏了开发人员的问题:他应该正确使用JPA。
让人们正确使用JPA:这就是为什么JHipster不能解决这个问题的原因。通过使用急切关系或使用事务和Spring服务,您可以通过多种方式解决此问题。在我看来,应该如何使用JPA,以及Spring控制器。