我在使用Hibernate Criteria API時非常奇怪的Hibernate行爲。我正在使用休眠4.3.6最終。 我有一類AnnouncementAttribute這樣的:EmbeddedId屬性上的Hibernate標準拋出org.hibernate.QueryException:無法解析屬性
@Entity
@Table(name = "announcement_attribute")
public class AnnouncementAttribute implements Serializable {
@EmbeddedId
protected AnnouncementAttributePK id;
@Column(name = "attribute_value")
private String attributeValue;
}
和AnnouncementAttributePK類下面:
@Embeddable
public class AnnouncementAttributePK implements Serializable {
@ManyToOne
@JoinColumn(name = "attribute_id")
private Attribute attr;
@ManyToOne
@JoinColumn(name = "announcement_id")
private Announcement announcement;
}
和屬性類:
@Entity
@Table(name = "attribute")
public class Attribute implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "attribute_type")
private Integer attributeType;
@Column(name = "attribute_name")
private String attributeName;
}
我這裏ommitted getter/setter方法。
問題是,當我嘗試通過標準API訪問@EmbeddedId屬性ATTR:
Criteria ac = session().createCriteria(AnnouncementAttribute.class);
ac.add(Restrictions.and(
Restrictions.eq("id.attr.attributeName", "someKey"),
Restrictions.eqOrIsNull("attributeValue", "someValue")));
我越來越:
org.hibernate.QueryException:無法解析屬性:ID。 attr.attributeNameName:com.example.app.domain.AnnouncementAttribute
我已經嘗試爲embeddedId創建一個別名 - 仍然沒有運氣。
我想這樣的做法,我越來越:org.hibernate.QueryException:標準的對象不能在組件中直接創建。在擁有實體上創建條件並使用虛線屬性訪問組件屬性:id –