Проблема консультирует JPQL

То, что я нуждаюсь в том, чтобы сделать, он состоит в том, чтобы заносить в список поставщики, которые ответили на единственный заказ. Я делаю консультацию, но у меня выходит ошибка (Object comparisons хан only be used with OneToOneMappings. Other mapping comparisons must be подарил through query keys or direct attribute level comparisons)

Консультация, которую я делаю, - такая

SELECT e.cedulaProveedor FROM Достиг и, Требуемый f where и idPedido=1

Организация вклада такая

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "idAporte")
private Integer idAporte;
@Basic(optional = false)
@NotNull
@Column(name = "cantidadAportada")
private int cantidadAportada;
@Basic(optional = false)
@NotNull
@Column(name = "precioAporte")
private int precioAporte;
@JoinColumn(name = "idPedido", referencedColumnName = "idPedido")
@ManyToOne(optional = false)
private Pedido idPedido;
@JoinColumn(name = "idProducto", referencedColumnName = "codigoProducto")
@ManyToOne(optional = false)
private Producto idProducto;
@JoinColumn(name = "cedulaProveedor", referencedColumnName = "cedulaProveedor")
@ManyToOne(optional = false)
private Proveedor cedulaProveedor;

Что ошибка, - потому что у меня есть связь между подмостками Вклады и Заказы и они связаны посредством колонны "idPedido", следовательно я не могу посылать 1, но не, как посылание объекта заказа, который был бы у id 1.

Если бы они смогли помогать мне, он был бы благодарен за это много.

1
задан 10.06.2016, 18:10
3 ответа

Ты должен делать JOIN для этой консультации. Статья JOIN принесет тебе союз 2 подмостков посредством поля совместно. В этом случае, Aporte и Pedido они связаны посредством idPedido в JPA (и что mapea в id_pedido в таблице в общем).

Твоя консультация осталась бы следующего способа:

SELECT e.cedularProveedor FROM Aporte e JOIN e.idPedido p WHERE p.idPedido = :idPedido

То, что переводится в:

SELECT e.cedular_proveedor FROM aporte e INNER JOIN Pedido p ON e.id_pedido = p.id_pedido WHERE e.id_pedido = ?

Таким образом ты получаешь вклады, которые соответствуют специфическому заказу.

1
ответ дан 24.11.2019, 14:11
  • 1
    Большое спасибо!! –  Lina Cortés 10.06.2016, 16:16
  • 2
    Ничего. Привет. –  gugadev 10.06.2016, 16:17
  • 3
    #191; не быть и # 237; в лучше и м и # 225; s прямой SELECT e.cedularProveedor FROM Aporte e WHERE e.idPedido.idPedido = :idPedido? –   10.06.2016, 18:11
  • 4
    Просвет, что s и # 237; в случае не требовался informaci и # 243; n заказа. –  gugadev 10.06.2016, 18:38

Ты не показываешь код объекта Pedido, но кажется, что ты запутываешь объект в себе, с Ваш пойдите.

query должен бы быть:

SELECT e.cedulaProveedor FROM Aporte e, Pedido f where e.idPedido.id =1

Я думаю, что самое логическое состояло бы в том, чтобы называть твой признак:

private Pedido idPedido;

Из-за:

private Pedido pedido;

Таким образом, query остался бы более связным:

SELECT e.cedulaProveedor FROM Aporte e, Pedido f where e.pedido.id =1

Я надеюсь помочь тебе.

0
ответ дан 24.11.2019, 14:11

Эта консультация JPQL показывает тебя поставщики ответили на единственный заказ:

SELECT aporte.cedulaproveedor, count( distinct aporte.pedido.idpedido ) 
FROM Aporte aporte 
GROUP BY aporte.cedulaproveedor HAVING count( distinct aporte.pedido.idpedido ) = 1

Principalment, есть три полезные статьи:

  • GROUP BY: тебе позволяет группировать вклады из-за каждого поставщика
  • count distinct: он позволяет тебе знать все заказы они были реализованы каждым поставщиком
  • HAVING: он позволяет тебе определять, что количества заказов из-за поставщика, которого ты ищешь, 1

, Я протестировал консультацию с plugin Ибернате Тоольс Затмения, очень практическим!

0
ответ дан 24.11.2019, 14:11