У меня есть две модели, Владелец и Контракт. Контракт имеет экземпляр владельца, у владельца нет списка контрактов. Я пытаюсь запросить мой список договоров, чтобы вернуть список, отфильтрованный по владельцу, то есть список договоров по владельцу.
Я пытался следовать предыдущим примерам и использовать критерии для написания настраиваемого запроса, но, следуя предложениям, я проверил доки и попытался использовать именованные запросы, однако, я все еще действительно изо всех сил.
There was an unexpected error (type=Internal Server Error, status=500).
Named parameter not bound : ownerId; nested exception is org.hibernate.QueryException: Named parameter not bound : ownerId
Мои модели выглядят так:
@Entity
@Table(name="Contracts")
@NamedQueries({
@NamedQuery(
name = "Contract.allContractsByOwner",
query = "SELECT c FROM Contract c WHERE c.owner.id LIKE :ownerId"
)
})
public class Contract {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;
@ManyToOne
private Owner owner;
@Column
private double price;
@Column
private String deliverDate;
public Contract(Owner owner, double price, String deliverDate) {
this.id = id;
this.owner = owner;
this.price = price;
this.deliverDate = deliverDate;
}
и
@Entity
@Table(name="Owners")
public class Owner {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;
@Column
private String name;
public Owner(String name){
this.name = name;
}
мой контрактRepoImpl
@Service
public class ContractRepositoryImpl implements ContractRepositoryCustom {
ContractRepository contractRepository;
@Autowired
EntityManager entityManager;
public List allContractsByOwner(Long ownerId) {
List contracts = entityManager.createQuery(
"SELECT c FROM Contract c WHERE c.owner.id LIKE :ownerId", Contract.class)
.getResultList();
return contracts;
}
}
, который я называю в моих файлах ContractRepo и ContractRepoCustom, а затем в своем контроллере я сопоставляю его так. Но когда я запрашиваю его в своем браузере, я получаю сообщение об ошибке в моем терминале.
@GetMapping(value="/owners/{ownerId}/contracts")
public List allContractsByOwner(@PathVariable("ownerId") Long ownerId){
return contractRepository.allContractsByOwner(ownerId);
}
Я понимаю, что это, вероятно, ошибки новичков, я пытаюсь следовать документам, но немного застрял в синтаксисе и там, где нужно добавлять аннотации.