我是jpql的新手。 我有兩個mySql表。 表廣告:與列:jpql從表中選擇對象基於另一個表的某些屬性?
ID,名稱,描述,電話號碼,類別等。
並表advert_property與下列:
id int 11
advert_id int 11
name varchar 255
value varchar 255
descr varchar 255
我的目標是選擇來自表advert
的對象,其中有一個屬性category = "flats"
寫在表advert
屬性名稱number_rooms = "234"
寫在表advert_property
。
我很困惑與JPQL大成一點點我來到這個解決方案:
Query q = em.createQuery("SELECT ap FROM AdvertProperty as ap, Advert as a "
+ " where a.category= 'flats' and ap.advertId = a.id and ap.name='number_rooms' ");
List<Advert> ads = q.getResultList();
但因爲我需要它不工作..
請建議, 感謝
廣告實體:
public class Advert implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
private Integer id;
@Size(max = 255)
private String title;
@Lob
@Size(max = 65535)
private String content;
private Integer price;
@Size(max = 255)
@Column(name = "contact_person")
private String contactPerson;
// @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation
@Size(max = 255)
private String email;
// @Pattern(regexp="^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$", message="Invalid phone/fax format, should be as xxx-xxx-xxxx")//if the field contains phone or fax number consider using this annotation to enforce field validation
@Size(max = 255)
private String phone;
@Column(name = "address_id")
private Integer addressId;
@Column(name = "category_id")
private Integer categoryId;
@Basic(optional = false)
@NotNull
@Column(name = "company_type")
private boolean companyType;
@Basic(optional = false)
@NotNull
private boolean approved;
@Column(name = "user_id")
private Integer userId;
@Column(name = "who_can_watch")
private Integer whoCanWatch;
@Basic(optional = false)
@NotNull
@Column(name = "creation_date")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Size(max = 255)
private String razdel;
public Advert() {
}
public Advert(Integer id) {
this.id = id;
}
AdvertProperty實體:
@Entity
@Table(name = "advert_property")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "AdvertProperty.findAll", query = "SELECT a FROM AdvertProperty a"),
@NamedQuery(name = "AdvertProperty.findById", query = "SELECT a FROM AdvertProperty a WHERE a.id = :id"),
@NamedQuery(name = "AdvertProperty.findByAdvertId", query = "SELECT a FROM AdvertProperty a WHERE a.advertId = :advertId"),
@NamedQuery(name = "AdvertProperty.findByName", query = "SELECT a FROM AdvertProperty a WHERE a.name = :name"),
@NamedQuery(name = "AdvertProperty.findByValue", query = "SELECT a FROM AdvertProperty a WHERE a.value = :value"),
@NamedQuery(name = "AdvertProperty.findByDescr", query = "SELECT a FROM AdvertProperty a WHERE a.descr = :descr")})
public class AdvertProperty implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
private Integer id;
@Column(name = "advert_id")
private Integer advertId;
@Size(max = 255)
private String name;
@Size(max = 255)
private String value;
@Size(max = 255)
private String descr;
不,我的財產主要是在另一張表,所以a.property.name - 它不會選擇任何東西,我不使用外鍵 – user2950593 2014-10-31 09:53:03
有兩個實體之間的關係?你能在你的問題中發佈實體嗎?如果有關係(也有可能是基於'advert_property.advert_id')和'Advert'有一個像'AdvertProperty屬性的關係;',這個查詢會工作。 – 2014-10-31 09:55:52
是,advert_property具有柱advert_id指向廣告。見entitites = UPD問題) – user2950593 2014-10-31 10:05:09