Фильтры гибернации - PullRequest
       1

Фильтры гибернации

0 голосов
/ 09 ноября 2018

Я пытался реализовать фильтры гибернации, но, похоже, получаю странные результаты.

Когда я получаю список, первый результат Ship Entity, похоже, получил правильную BuildFormula, когда я перехожу к следующему объекту, BuildFormula неверна.

1-й: itemType = Ship 2-й: itemType = Building

Session session = entityManager.unwrap(Session.class);

session.enableFilter(BY_USER_ID_PLANET_ID_STAR_ID)
.setParameter(USER_ID, UserInfoHolder.getLocation().getUserId())
.setParameter(PLANET_ID, UserInfoHolder.getLocation().getPlanetId())
.setParameter(STAR_ID, UserInfoHolder.getLocation().getStarId());

session.enableFilter(TYPE).setParameter("itemType", SHIP);

List<Ship> buildingList = session.createQuery("FROM Ship", Ship.class).getResultList();
return buildingList.stream().map(this::convertToVO).collect(Collectors.toList());

Основное лицо

@Data
@Table
@Entity
public class Ship {

    public static final String SHIP = "ship";

    @Id
    private Integer id;

    private String name;

    private String description;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "itemId", referencedColumnName="id", insertable = false, updatable = false)
    @Filter(name = "byType", condition = "item_type = :itemType")
    private List<BuildFormulas> buildFormulas;


    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "shipId", insertable = false, updatable = false)
    @Filter(name = "byUserIdPlanetIdStarId")
    private List<ShipToUser> shipToUser;

}

И класс BuildFormulas

@Data
@Entity
@FilterDef(
        name = "byType",
        defaultCondition = "item_type = :itemType",
        parameters = {
                @ParamDef(name = "itemType", type = "string")
        }
)
public class BuildFormulas {

    @Id
    private Integer itemId;

    private String metalCost;

    private String crystalCost;

    private String deuteriumCost;

    private String energyCost;

    private String speed;

    private String itemType;
}

И ShipToUser

@Data
@Entity
@FilterDef(
        name = "byUserIdPlanetIdStarId",
        defaultCondition = "user_id = :userId AND planet_id = :planetId AND star_id = :starId",
        parameters = {
                @ParamDef(name = "userId", type = "int"),
                @ParamDef(name = "planetId", type = "string"),
                @ParamDef(name = "starId", type = "string")
        }
)
public class ShipToUser {

    @EmbeddedId
    private ShipToUserKey shipToUserKey;

    private int amount;

}

Любая помощь будет полезна для раскрытия этой тайны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...