У меня есть следующие таблицы ...
Object1
-------
id
...
Object2
-------
id
...
AttributeValue
--------------
id
attribute_id
object_id
value
Attribute
---------
id
name
type
... и классы сущностей
@Entity
@Table(name = "Attribute")
public class Attribute {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "type")
private String type;
}
@Entity
@Table(name = "AttributeValue")
public class AttributeValue {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "attribute_id")
private Long attributeId;
@Column(name = "object_id")
private Long objectId;
@Column(name = "value")
private String value;
}
@Entity
@Table(name = "Object1")
public class Object1 {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
// ...
// how to annotate to get all matching attribute values?
private Set<AttributeValue> values;
}
Я хочу, чтобы hibernate заполнил переменную экземпляра values
всеми AttributeValue
с соответствующими object_id
и типом атрибута object1
.
Если бы речь шла только о критерии object_id
, я бы написал, например,
@JoinColumn(insertable = false, updatable = false, name = "object_id")
private Set<AttributeValue> values;
Но в этом случае будут заполнены также значения типа object2
и т. Д.
Итак, мой вопрос: выражается ли эта семантика в Hibernate и если да, то как?
РЕДАКТИРОВАТЬ: Я хочу подчеркнуть, что цель состоит в том, чтобы иметь несколько объектов (здесь Object1
, Object2
, ... ObjectN
), которые не имеют общей иерархии, но все они имеют свойство атрибутов . Атрибуты для всех объектов будут находиться в одной таблице, различаемой каким-то типом дискриминатора (здесь, например, type
).