Как написать пользовательский запрос для метода хранилища CRUD, который находит класс на основе текущего пользователя? - PullRequest
0 голосов
/ 28 декабря 2018

Я создаю приложение Spring-boot с использованием jhipster, где у пользователей есть moneyAccounts.В настоящее время, когда пользователь входит в приложение, он может видеть все moneyAccounts для всех пользователей, и я добавляю метод, который будет искать только учетные записи для текущего вошедшего в систему пользователя.Как мне сформулировать запрос, который будет искать учетные записи только на основе текущего пользователя?

Я пробовал запрос, подобный тому, что приведен в этом посте , но моя сборка не будет выполняться, если толькоЯ использовал собственный формат запроса.Я переформулировал запрос в собственном формате, как показано ниже.

@Query(value = "select * from MONEY_ACCOUNT where MONEY_ACCOUNT.USER_DETAILS_ID = ?#{principal?.id}", nativeQuery = true)
List<MoneyAccount> findByUserIsCurrentUser();

Приведенный выше запрос выдал ошибку 500 на моей странице.Любые советы приветствуются!

Сущность:

@Entity
@Table(name = "jhi_user")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class User extends AbstractAuditingEntity implements Serializable           {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;

@NotNull
@Pattern(regexp = Constants.LOGIN_REGEX)
@Size(min = 1, max = 50)
@Column(length = 50, unique = true, nullable = false)
private String login;

@JsonIgnore
@NotNull
@Size(min = 60, max = 60)
@Column(name = "password_hash", length = 60, nullable = false)
private String password;

@Size(max = 50)
@Column(name = "first_name", length = 50)
private String firstName;

@Size(max = 50)
@Column(name = "last_name", length = 50)
private String lastName;

@Email
@Size(min = 5, max = 254)
@Column(length = 254, unique = true)
private String email;

@NotNull
@Column(nullable = false)
private boolean activated = false;

@Size(min = 2, max = 6)
@Column(name = "lang_key", length = 6)
private String langKey;

@Size(max = 256)
@Column(name = "image_url", length = 256)
private String imageUrl;

@Size(max = 20)
@Column(name = "activation_key", length = 20)
@JsonIgnore
private String activationKey;

@Size(max = 20)
@Column(name = "reset_key", length = 20)
@JsonIgnore
private String resetKey;

@Column(name = "reset_date")
private Instant resetDate = null;

@JsonIgnore
@ManyToMany
@JoinTable(
    name = "jhi_user_authority",
    joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")},
    inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name")})
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@BatchSize(size = 20)
private Set<Authority> authorities = new HashSet<>();
//getters and setters etc.

Репозиторий:

@Repository
public interface MoneyAccountRepository extends JpaRepository<MoneyAccount, Long> {

@Query(value = "select * from MONEY_ACCOUNT where MONEY_ACCOUNT.USER_DETAILS_ID = #{principal.id}", nativeQuery = true)
List<MoneyAccount> findByUserIsCurrentUser();
}

1 Ответ

0 голосов
/ 28 декабря 2018

Вы пропускаете # перед директором, что-то вроде:

"select * from MONEY_ACCOUNT where MONEY_ACCOUNT.USER_DETAILS_ID = #{principal.id}"

Прочтите это tuto для получения дополнительной информации.

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