2017-03-22 1 views
0

jhipster 응용 프로그램을 구축 중입니다. 현재 로그인 한 사용자를 기반으로 개체 목록을 얻으려고합니다. 현재 로그인 한 사용자가 현재 사용자의 블로그를 얻는 방법을 설명하는 jhipster blog demo과 같은 간단한 예가 몇 가지 있습니다. 그 중 하나를 모방하고 싶습니다. 이 데모는 ISA의 repo 방법 :JHipster에서 현재 로그인 한 사용자를 얻는 중

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

을하지만 내 IDE이 오류가 발생합니다 :

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

내가 너무 아니에요을

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

나는 다음 이것을 모방하는 것을 시도했다 최대 절전 모드 쿼리에 익숙하지만 매개 변수가 내 IDE에서 오류가있는 것 같습니다. 결국 매개 변수를 어딘가에 구성해야합니까? DTO 개체로 일반 jhipster 4를 사용하고 있습니다. 여기

는 관련 엔티티 :

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<>(); 

답변

7

당신은 현재 리터를 얻을 수 있습니다 사용자 ID는 SecurityUtils입니다. SecurityUtils.getCurrentUserLogin()은 현재 로그인 한 사용자의 로그인을 제공합니다. 이 로그인을 사용하여 db에서 사용자 엔티티를 가져옵니다. (findOneByLogin)

+0

네, 맞습니다. 당신은 그것을 할 수 있습니다. 그러면 문제는 그것이 쿼리의 첫 번째 부분에 불과하다는 것입니다. 사용자 ID를 get all 메소드에 전달해야합니다. 나는이 방법을 단순화하기 위해 노력하고있다. – StillLearningToCode

관련 문제