-1
有人可以幫我翻譯下面的postgresql查詢到EntyManager.createQuery嗎?如何使用EntyManager createQuery函數將postgresql select查詢轉換爲jpa?
SELECT distinct id.itemid, id.itemdetailid, id.property, id.propertyval
FROM item_detail1 id
join (SELECT distinct i.itemid
FROM item_detail1 id
join item i
on i.itemid = id.itemid
where
id.itemdetailid in (9,22,24,27)) myItems
on myItems.itemid = id.itemid
join category_item ci
on ci.itemid = id.itemid
where id.itemdetailid not in (9,22,24,27) and
ci.categoryid = 1005 and id.propertyval is not null
order by id.property asc, id.itemdetailid asc
以下是缺失的必需實體。我在內聯中的子查詢中遇到了最多的問題。我有以下jpa查詢但缺少子查詢連接。
SELECT distinct id.itemid, id.itemdetailid, id.property, id.propertyval
FROM item_detail1 id
join id.itemid i
join i.categoryCollection c
where id.itemdetailid not in (9,22,24,27) and
c.categoryid = 1005 and id.propertyval is not null
order by id.property asc, id.itemdetailid asc
@Entity
@Table(name = "item_detail1")
@XmlRootElement
public class ItemDetail1 implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "itemdetailid")
private Integer itemdetailid;
@JoinColumn(name = "itemid", referencedColumnName = "itemid")
@ManyToOne
private Item itemid;
..getters and setters
}
@Entity
@Table(name = "item")
@XmlRootElement
public class Item implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "itemid")
private Integer itemid;
@ManyToMany(mappedBy = "itemCollection")
private Collection<Category> categoryCollection;
@OneToMany(mappedBy = "itemid")
private Collection<ItemDetail1> itemDetail1Collection;
..getters and setters
}
@Entity
@Table(name = "category")
@XmlRootElement
public class Category implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "categoryid")
private Integer categoryid;
@JoinTable(name = "category_item", joinColumns =
{
@JoinColumn(name = "categoryid", referencedColumnName = "categoryid")
},
inverseJoinColumns = {
@JoinColumn(name = "itemid", referencedColumnName = "itemid")
})
@ManyToMany
private Collection<Item> itemCollection;
..getters and setters
}
謝謝。
你試過了什麼?你期望有人拿出這個沒有任何實體? (因爲JPQL只使用實體字段) – 2014-08-31 07:24:41
對不起,漫長的一天。 – fs2050 2014-08-31 09:02:12
注意:'join(SELECT distinct i.itemid ....)'子查詢可以重寫爲'EXISTS(...)'構造。這更清晰,而且通常更快。 – wildplasser 2014-08-31 11:22:38