У меня есть класс 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?