Я использую JPA поверх Hibernate, с настройкой аннотации.
Я ищу пользовательский метод «выбор», который позволил бы мне узнать размер «ленивой коллекции» без получения коллекции.
Я попробовал это, но безуспешно:
@Entity
@Table(name="t_test")
public class Test {
@Id
@Column(name="name", length=50)
private String name;
@Column(name="first_name", length=50)
private String firstName;
@ElementCollection(fetch=FetchType.LAZY)
@JoinTable(name = "tj_test_nicknames", schema="",
joinColumns = {@JoinColumn(name = "name")}
)
@ForeignKey(name = "FK_test_nickname")
@Column(name="nickname", nullable=false)
private Set<String> nickNames = new HashSet();
@Formula("(SELECT COUNT(t.nickname) FROM tj_test_nicknames t WHERE t.name = name)")
private int counter;
В моем тесте я просто пытаюсь отобразить номер счетчика (с классикой для)
Test test = new Test();
test.setFirstName("prenom");
test.setName("nom" + Math.random());
Set<String> nickNames = new HashSet<String>();
nickNames.add("surnom");
nickNames.add("toto");
test.setNickNames(nickNames);
testDAO.save(test);
Collection<Test> tests = testDAO.getAll();
if(tests!=null){
for (Test testT : tests) {
logger.info("Number of nicknames: " + testT.getNumberOfNicknames());
logger.info("Size of the list:: " + testT.getNickNames().size());
}
}
Но я отображаю 0 для каждого экземпляра объекта (который имеет инстанцированную ленивую коллекцию).
org.hibernate.pretty.Printer список объектов: ...
Test {counter = 2, name = nom0.46579385535806883, firstName = prenom, nickNames =}
Test {counter = 0, name = nom0.6489676574372193, firstName = prenom, nickNames = [toto, surnom]}
Test {counter = 2, name = nom0.6362777689140984, firstName = prenom, nickNames =}
Test {counter = 2, name = nom0.15039481770844532, firstName = prenom, nickNames =}
Test {counter = 2, name = nom0.5580054662200352, firstName = prenom, nickNames =}
EDIT:
Итак, я понял, что когда создается экземпляр ленивой коллекции nickNames, он возвращает 0, а не хорошее число.
Так что это действительно раздражает, так как я хочу получить размер, чтобы не создавать впечатление на коллекцию, но в случае, если у меня есть экземпляр коллекции, у меня должна быть хорошая информация ...
У кого-нибудь есть идеи, как это сделать?
Спасибо