Как Hibernate находит тот же объект в том же сеансе, если Id не имеет равных - PullRequest
0 голосов
/ 06 октября 2018

У меня есть класс Entity, у которого есть составной идентификатор, и ни класс переопределения класса, ни переопределенный класс составного идентификатора не равны, но findById (композитный идентификатор) возвращает один и тот же объект в рамках одного сеанса, если значения полей составного идентификатора совпадают.Он не может использовать некоторый прокси для определения равных, потому что если он это сделает, он вернет тот же объект и в другом сеансе, но в другом сеансе, возвращенный результат не будет тем же экземпляром.

Примеры кода

@Embeddable
public class CompositeKey implements Serializable{
    @NotBlank
    private String partKey1;

    @NotBlank
    private String partKey2;
//getter setter

}

У сущности также нет равных

    @Entity
    @Table(name = "testentity")
    public class TestEntity {

        @EmbeddedId
        private CompositeKey cid;

        @NotBlank
        private String otherFields;
//getter setter
}

Внутри одного и того же сеанса вызовы с разными экземплярами CompositeKey возвращают один и тот же экземпляр (если значение полейCompositeKey такие же).В другом сеансе он возвращает другой экземпляр, даже если значения полей CompositeKey совпадают, я могу проверить это, следуя фрагменту кода в контроллере

  compositeKey=getNewCompositeKey(partKeyValue1,partKeyValue2)
     Optional<TestEntity> existing = TestEntityRepository.findById(compositeKey);
            if (existing.isPresent()) {
                TestEntity existing1 = existing.get();
                testEntitySet.add(existing1);
                //create a new key and use findById again
                //it gives the same instance if values of fields of
               //compositeKey are same

Мой вопрос здесь находится в том же сеансе, как он находит то же самоеэкземпляр каждый раз без равных в классе Composite Id?

1 Ответ

0 голосов
/ 06 октября 2018

Каждый класс имеет реализацию по умолчанию equals и hashcode, происходящую из Object класса.

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