SpringBoot Composite Key Query;Как получить значения из части составного ключа - PullRequest
0 голосов
/ 05 июня 2019

У меня есть отношение «многие ко многим» между пользователем и местоположением, которое было определено и работает хорошо; все проблемы начались, когда я должен использовать часть составного ключа для выполнения поиска данных.

Модель бизнес-пользователя определяется следующим образом:

    @Table(name = "BusinessUser")
public class User {
    private String userId;
    private String userAuthId;
    private Set<UserLocation> userLocations;

    @Id
    public String getUserId () {
        return userId;
    }

    public void setUserId ( String userId ) {
        this.userId = userId;
    }

    public User () {
        userLocations = new HashSet<>();
    }
    @JsonManagedReference
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
    public Set<UserLocation> getUserLocations () {
        return userLocations;
    }

    public void setUserLocations ( Set<UserLocation> userLocations ) {
        this.userLocations = userLocations;
    }
}

Объект местоположения определяется следующим образом:

    public class Location {
    private String locationId;
    private String googlePlacesId;
    private Set<UserLocation> userLocations;

    @Id
    public String getLocationId () {
        return locationId;
    }

    public void setLocationId ( String locationId ) {
        this.locationId = locationId;
    }

    public Location () {
        userLocations = new HashSet<>();
    }
    @JsonManagedReference
    @OneToMany(mappedBy = "location")
    public Set<UserLocation> getUserLocations () {
        return userLocations;
    }

    public void setUserLocations ( Set<UserLocation> userLocations ) {
        this.userLocations = userLocations;
    }
}

И таблица UserLocation выглядит следующим образом:

@Entity
@Table(name="user_location")
@IdClass(UserLocation.UserLocationId.class)
public class UserLocation implements Serializable {

    private User user;
    private Location location;
    private Date createdDate;

    @Id
    @ManyToOne
    @JsonBackReference
    @JoinColumn(name = "userId")
    public User getUser () {
        return user;
    }

    public void setUser ( User user ) {
        this.user = user;
    }

    @Id
    @ManyToOne
    @JsonBackReference
    @JoinColumn(name = "locationId")
    public Location getLocation () {
        return location;
    }

    public void setLocation ( Location location ) {
        this.location = location;
    }

    public Date getCreatedDate () {
        return createdDate;
    }

    public void setCreatedDate ( Date createdDate ) {
        this.createdDate = createdDate;
    }

Это было сделано для того, чтобы обеспечить согласованное сопоставление между пользователем и местоположением. Но проблема возникает сейчас; где у меня есть userID и на основании этого мне нужно получить все LocationId из таблицы UserLocation. Как только у меня будет весь идентификатор местоположения, я могу получить все объекты местоположения.

Мой JPARepository для UserLocation был создан следующим образом:

@Repository
public interface UserLocationRepository extends JpaRepository<UserLocation,Long> {
    List<UserLocation> findByUser ( User user);
}

Это лучший способ определения этих отношений. Как я могу получить значение Location с учетом только userID Я вижу ошибку IdClass, для которой я определил класс ID и добавил то же самое. Как только я это делаю, я вижу постоянную ошибку Id. Любые подсказки?

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