У меня есть следующая модель и хранилище:
@Entity
@Table(name = "db_user", uniqueConstraints = { @UniqueConstraint(columnNames = "email") })
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_user")
@SequenceGenerator(name = "seq_user", sequenceName = "seq_user")
@Column(name = "id")
private Long id;
// ...
}
@Entity
@Table(name = "movie")
public class Movie extends AbstractItem {
// Id column inherited from AbstractItem
// ...
}
@Entity
@Table(name = "movie_user")
public class MovieOwnership extends AbstractOwnership {
@ManyToOne
private Movie movie;
// ...
}
@MappedSuperclass
public abstract class AbstractOwnership{
@Id
@SequenceGenerator(name = "seq_default", sequenceName = "seq_default")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_default")
@Column(name = "id")
private Long id;
@ManyToOne
private User owner;
// ...
}
public interface MovieOwnershipRepository extends QueryDslJpaRepository<MovieOwnership, Long> {
List<MovieOwnership> findByOwnerId(Long ownerId);
MovieOwnership findByOwnerIdAndMovie(Long ownerId, Movie movieId);
List<MovieOwnership> findByOwnerIdAndMovieIdIn(Long ownerId, Set<Long> movieIds);
}
Я пытаюсь использовать запросы SpringByindBy для извлечения MovieOwnerships по владельцу или фильму, используя поле id обеих сущностей. Я могу работать напрямую с идентификатором владельца, но использование MovieId в моих запросах кажется некорректным (хотя я могу использовать весь объект Movie). В приведенном выше коде первые два findBy в порядке, но последний выдает это исключение:
Причина: java.lang.IllegalArgumentException: невозможно найти
Атрибут с указанным именем [movieId] для этого ManagedType
[Carrm.app.data.AbstractOwnership]
Он компилируется, если я пытаюсь использовать другое свойство из Movie (например, findByMovieTitle), но не могу заставить его работать с идентификатором.
Есть идеи, как это решить?