Hibernate метод find иногда возвращает прокси - PullRequest
0 голосов
/ 08 июня 2018

В последнее время мой проект столкнулся с действительно странной проблемой с JPA findOne(id), возвращающей прокси-объект вместо полного объекта.

Вот сценарий.Рассмотрим сущности и их связи, показанные ниже.

    @Table(name = "HOUSE")
        @Entity
        @EqualsAndHashCode
        @Setter
        @ReadPermission(expression = "user has rights for template snapshots AND has filter")
        public class HouseEntity extends VersionedEntity {

       @OneToMany(cascade = CascadeType.ALL, mappedBy = "house", fetch = FetchType.LAZY, orphanRemoval = true)
            public List<RoomEntity> getRooms() {
                return rooms;
            }
        @OneToMany(cascade = CascadeType.ALL, mappedBy = "template", fetch = FetchType.LAZY, orphanRemoval = true)
            public List<TableEntity> getTables() {
                return tables;
            }
        }

    @Entity
    @Table(name = "ROOMS")
    public class Room {
     @ManyToOne(fetch = FetchType.LAZY)
        public HouseEntity getHouse() {
            return house;
        }
    @OneToMany(mappedBy = "room", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
        public List<TableEntity> getTables() {
            return tables;
        }
    }

@Entity
@Table(name = "TABLES")
public class TableEntity{
 @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "HOUSE_ID")
    public HouseEntity getHouse() {
        return template;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ROOM_ID")
    public RoomEntity geRoom() {
        return room;
    }

Как видите, House имеет Tables и Rooms, Rooms также имеет Tables, а каждая дочерняя сущность имеетподключение к его родителям.

  1. Добавьте таблицу в HouseEntity
  2. Снимите таблицу с HouseEntity сразу после.

Для 1houseRepository.findById получает мой HouseEntity, завернутый в прокси, как будто он загружен лениво.

Странная часть в том, что если я сделаю:

  1. Добавить таблицуRoomEntity, который является потомком HouseEntity.
  2. Удалить таблицу из RoomEntity.

Затем houseRepository.findById возвращает HouseEntity без прокси.

Мой вопрос здесь, почему это произошло?Почему в этом случае метод findById возвращает прокси-объект?Мне нужно иметь доступ к обычному объекту без прямого прокси-сервера, даже если в прокси-объекте объект заполнен в целевом объекте.

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