У меня есть пример сущности JPA:
@Entity
@Table(name = "tb_group")
public class Group
{
...
@ManyToMany
@JoinTable(name = "tb_group_user",
joinColumns = @JoinColumn(name = "fk_group_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "fk_user_id", referencedColumnName = "id"))
private List<User> users;
private Integer userSize;
...
}
Мой вопрос: как я могу инициализировать поле userSize значением поля user, которое является полем Lazy Load?
Я знаю, что это глупый вопрос, но я не могу найти хорошую стратегию для решения этой проблемы.
Я пробовал это решение, но не смог:
private Integer userSize = users.size();
Я запутался с этой проблемой. Можете ли вы помочь мне с примером?
РЕДАКТИРОВАТЬ:
Я пробовал решение @Formula("select count(gu.fk_user_id) from tb_group_user gu where gu.fk_group_id = id")
предложено Ady Junior , но я получаю это исключения , когда я пытаюсь получить группы:
ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper You have an error in your SQL syntax;
check the manual that corresponds to your MariaDB server version for the right syntax to use near
select count(gu.fk_user_id) from tb_group_user gu where gu.fk_group_id = group
ERROR br.com.loopec.loopkey.server.controller.ExceptionsHandler
Unhandled Exception: org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is
org.hibernate.exception.SQLGrammarException: could not extract ResultSet
РЕДАКТИРОВАТЬ 2:
Я получил это решил проблему. Ady Junior дайте мне хорошее решение, и ошибка произошла из-за моей глупости. Внутри @Formule("select count(gu.fk_user_id) from tb_group_user gu where gu.fk_group_id = id")
я забыл заключить в скобки круглые скобки '(' ')' между запросами.
Правильное решение моей проблемы это:
@Entity
@Table(name = "tb_group")
public class Group
{
...
@ManyToMany
@JoinTable(name = "tb_group_user",
joinColumns = @JoinColumn(name = "fk_group_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "fk_user_id", referencedColumnName = "id"))
private List<User> users;
@Formula("(select count(gu.fk_user_id) from tb_group_user gu where gu.fk_group_id = id)")
private Integer userSize;
...
}
Спасибо Ady Junior и Спасибо Кристиан Бейков