【发布时间】:2016-04-28 18:29:04
【问题描述】:
我在使用 Hibernate Criteria API 时遇到了一个非常奇怪的 Hibernate 行为。我正在使用休眠 4.3.6 Final。 我有一个这样的类 AnnouncementAttribute:
@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;
}
我在这里省略了 getter/setter。
问题是当我尝试通过 Criteria 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.attributeName of:com.example.app.domain.AnnouncementAttribute
我已经尝试为 embeddedId 创建别名 - 仍然没有成功。
【问题讨论】:
标签: java hibernate hibernate-criteria