如何修复它:"无法初始化代理 - 没有会话"

时间:2016-01-03 08:15:34

标签: java jpa playframework

我正在制作API以将结果作为JSON

返回
 public CompletionStage<Result> update(Long id) {
    return CompletableFuture.supplyAsync(() -> {
        Building building = service.updateBuilding(id, request().body().asJson());
        return ok(Json.toJson(building));
    }, ec.current()).exceptionally(throwable -> {
        throwable.printStackTrace();
        return badRequest();
    });
}

发生异常:

  
      
  • 异常:com.fasterxml.jackson.databind.JsonMappingException:懒得初始化角色集合:   models.device.Building.Floors,无法初始化代理 - 没有Session   (通过参考链:models.device.Building [&#34; floors&#34;])
  •   

但是创建的api正常工作....

public CompletionStage<Result> create() {
    return CompletableFuture.supplyAsync(() -> {
        Building building = service.createBuilding(request().body().asJson());
        return ok(Json.toJson(building));
    }, ec.current()).exceptionally(throwable -> {
        throwable.printStackTrace();
        return badRequest();
    });
}

我的问题

  • 如何解决

  • 为什么它刚刚发生,除了名为

详细代码

模型

@Entity
@Table(name = "Buildings")
public class Building {

@Id
@SequenceGenerator(name = "device_sequence", sequenceName = "sq_deviaes")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "device_sequence")
@Column(name = "building_device_id")
private Long id;

@Column (name = "building_id", unique = true)
private Integer buildingId;

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

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "building_device_id")
private List<Floor> Floors;

@NotNull
@Column (name = "updated_at", nullable = false)
private LocalDateTime updatedAt;

控制器

public CompletionStage<Result> create() {
    return CompletableFuture.supplyAsync(() -> {
        Building building = service.createBuilding(request().body().asJson());
        return ok(Json.toJson(building));
    }, ec.current()).exceptionally(throwable -> {
        throwable.printStackTrace();
        return badRequest();
    });
}

public CompletionStage<Result> update(Long id) {
    return CompletableFuture.supplyAsync(() -> {
        Building building = service.updateBuilding(id, request().body().asJson());
        return ok(Json.toJson(building));
    }, ec.current()).exceptionally(throwable -> {
        throwable.printStackTrace();
        return badRequest();
    });
}

服务

public Building createBuilding(JsonNode jsonNode) {
    return LukeJPA.withSharedTransaction(() -> {
        return buildingDAO.create(jsonNode).get();
    });
}

public Building updateBuilding(Long id, JsonNode jsonNode) {
    return LukeJPA.withSharedTransaction(() -> {
        Building building = null;
        try {
            building = buildingDAO.update(id, jsonNode);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return building;
    });
}

0 个答案:

没有答案