2017-03-22 5 views
0

Ich baue eine Zhipster-Anwendung. und ich versuche, eine Liste von Objekten basierend auf dem aktuell angemeldeten Benutzer zu erhalten. Es gibt ein paar einfache Beispiele online wie jhipster blog demo, die beschreiben, wie man die Blogs des aktuellen Benutzers vom aktuell angemeldeten Benutzer erhält - und ich wollte dies nachahmen. In der Demo gibt isa Repo-Methode:Abrufen des aktuellen angemeldeten Benutzers in JHipster

@Query("select blog from Blog blog where blog.user.login = ?#{principal.username}") 
List<Blog> findByUserIsCurrentUser(); 

Ich habe versucht, dies mit dem folgenden nachzuahmen:

@Query("select userWorkoutTemplate from WorkoutTemplate workoutTemplate where workoutTemplate.userDemographic.user.login = ?#{principal.username}") 
List<WorkoutTemplateDTO> findByUserIsCurrentUser(); 

aber meine IDE führt diesen Fehler:

nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.thefitnation.repository.WorkoutTemplateRepository.findByUserIsCurrentUser()!

Ich bin nicht zu vertraut mit Hibernate-Abfragen, aber der Parameter scheint in meiner IDE fehlerhaft zu sein. Muss der Parameter am Ende irgendwo konfiguriert werden? Ich verwende plain jhipster 4 aus der Box mit DTO-Objekten.

hier sind die zuständigen Stellen:

User.java

@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) 
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(max = 100) 
@Column(length = 100, unique = true) 
private String email; 

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

@Size(min = 2, max = 5) 
@Column(name = "lang_key", length = 5) 
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) 
private String resetKey; 

@Column(name = "reset_date") 
private ZonedDateTime 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<>(); 
.... 

UserDemographic.java

@Entity 
@Table(name = "user_demographic") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class UserDemographic implements Serializable { 

private static final long serialVersionUID = 1L; 

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

@NotNull 
@Column(name = "created_on", nullable = false) 
private LocalDate createdOn; 

@NotNull 
@Column(name = "last_login", nullable = false) 
private LocalDate lastLogin; 

@Enumerated(EnumType.STRING) 
@Column(name = "gender") 
private Gender gender; 

@NotNull 
@Column(name = "date_of_birth", nullable = false) 
private LocalDate dateOfBirth; 

@Column(name = "height") 
private Float height; 

@NotNull 
@Enumerated(EnumType.STRING) 
@Column(name = "unit_of_measure", nullable = false) 
private UnitOfMeasure unitOfMeasure; 

@OneToOne(optional = false) 
@NotNull 
@JoinColumn(unique = true) 
private User user; 

@ManyToMany 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
@JoinTable(name = "user_demographic_gym", 
      joinColumns = @JoinColumn(name="user_demographics_id", referencedColumnName="id"), 
      inverseJoinColumns = @JoinColumn(name="gyms_id", referencedColumnName="id")) 
private Set<Gym> gyms = new HashSet<>(); 

@OneToMany(mappedBy = "userDemographic") 
@JsonIgnore 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
private Set<UserWeight> userWeights = new HashSet<>(); 

@OneToMany(mappedBy = "userDemographic") 
@JsonIgnore 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
private Set<WorkoutTemplate> workoutTemplates = new HashSet<>(); 

@OneToMany(mappedBy = "userDemographic") 
@JsonIgnore 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
private Set<UserWorkoutTemplate> userWorkoutTemplates = new HashSet<>(); 

@ManyToOne(optional = false) 
@NotNull 
private SkillLevel skillLevel; 

UserWorkoutTemplate.java

@Entity 
@Table(name = "user_workout_template") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class UserWorkoutTemplate implements Serializable { 

private static final long serialVersionUID = 1L; 

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

@NotNull 
@Column(name = "created_on", nullable = false) 
private LocalDate createdOn; 

@NotNull 
@Column(name = "last_updated", nullable = false) 
private LocalDate lastUpdated; 

@Column(name = "notes") 
private String notes; 

@ManyToOne(optional = false) 
@NotNull 
private UserDemographic userDemographic; 

@ManyToOne 
private WorkoutTemplate workoutTemplate; 

@OneToMany(mappedBy = "userWorkoutTemplate", fetch = FetchType.EAGER) 
@JsonIgnore 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
private Set<UserWorkoutInstance> userWorkoutInstances = new HashSet<>(); 

Antwort

7

Sie können die aktuelle l erhalten Ogged in Benutzer-ID von SecurityUtils. SecurityUtils.getCurrentUserLogin() gibt Ihnen die Anmeldung des aktuell angemeldeten Benutzers. Verwenden Sie diese Anmeldung, um die Benutzerentität aus db abzurufen. (findOneByLogin)

+0

Ja, das stimmt. Das kannst du machen. Das Problem besteht dann nur in der ersten Hälfte der Abfrage. dann müssen Sie die Benutzer-ID in die Get-All-Methode übergeben. Ich versuche es aus Gründen der Einfachheit so. – StillLearningToCode

Verwandte Themen