Итак, у меня есть хранилище, определенное следующим образом:
public interface PersonRepository extends CrudRepository<Person, Long>
Моя сущность выглядит следующим образом:
@Entity
@Table(name="Person")
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name="PERSON_GENERATOR", sequenceName="PERSON_SEQ")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PERSON_GENERATOR")
private Long id;
@Column(name="ssn")
private String socialSecurityNumber;
private String name;
public Person() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
Я опустил получатели и установщики для socialSecurityNumber и Name.В базе данных есть 1000 записей.
У меня есть bean-компонент Spring с аннотацией @Component
, который использует PersonRepo, вызывая его findAll()
.Когда вызывается findAll()
, я получаю список из 1000 записей с их уникальным идентификатором, однако, когда я перебираю список лиц, возвращенных findAll()
, я нахожу неожиданные результаты.
@Component
public class PersonComponent {
@Autowired
PersonRepository personRepo;
public void printPerson() {
List<Person> people = personRepo.findAll();
for(Person person : people) {
System.out.println("id=" + person.getId() + ", ssn=" + person.getSocialSecurityNumber() + ", name=" + person.getName());
}
}
}
Так что если в моемУ меня есть записи
id, ssn, name
1, ssn1, Bob
2, ssn2, Mary
3, ssn3, Joe
, когда я звоню findAll()
Я постоянно получаю это обратно
id=1, ssn=ssn1, name=Bob
id=2, ssn=ssn2, name=Mary
id=3, ssn=ssn2, name=Mary
Обратите внимание, что я получаю правильные идентификаторы (т.е. 1, 2, 3) но по какой-то причине идентификатор 3 сопоставлен с ssn2, Мэри и НЕ ssn3, Джо
Это происходит только после первого вызова findAll()
(т. е. первый findAll, работает нормально, но последующие, как только показываютповедение объяснено выше).Другими словами, когда приложение запускается, и компонент Spring, который использует PersonRepo, вызывается впервые, findAll()
, кажется, работает нормально.Но когда делается последующий вызов Spring Bean, findAll ведет себя как описано.
Наконец, когда я вызываю веб-сервис http://localhost/persons (который вызывает `findAll () под прикрытием), я получаюправильное поведение каждый раз.
Есть мысли?