这是我正在使用的表格。有一个包含一些预定义列的 User 表(下例中的“名称”)和一个用于使架构扩展成为可能的 Extra Attributes 表。Extra Attributes 表将任何新扩展属性的值存储为键值对('title' 和 'mobile' 是下面示例中的额外属性),并且 'user' 列用于连接主 User 表。这种安排通常适用于大多数操作,但我想不出一种方法来对用户的任何额外属性进行排序。
User Table:
---------------
id name
==============
1 jon
2 harry
Extra attributes table:
--------------------------------
user attr_key attr_value
================================
1 title engineer
1 mobile 111-2222-4444
2 title manager
2 mobile 111-0000-5555
Result of joining the two tables above(few columns intentionally skipped):
--------------------------------------------
id name attr_key attr_value
============================================
1 jon title engineer
1 jon mobile 111-2222-4444
2 harry title manager
2 harry mobile 111-0000-5555
我正在为 ORM 使用休眠。以下是实体类:
@Entity
public class User {
private Long id;
private String name;
private Set<ExtraAttributes> extraAttributes;
public String getName() {}
@OneToMany(mappedBy="user",fetch=FetchType.EAGER)
public Set<ExtraAttributes> getExtraAttributes() {}
...
}
@Entity
public class ExtraAttribute {
private Long id;
private String attrKey;
private String attrValue;
private User user;
...
@ManyToOne(optional = false)
public User getUser() {}
...
}
我希望能够通过与特定 attr_key 相对应的 attr_value 对结果进行排序,例如“title”。问题是,如果我按 attr_value 排序结果,那么将考虑所有 attr_values,而我只想按与特定 attr_key - 'title' 对应的 attr_values 排序。我想过按 attr_key 和 attr_value 排序,但这似乎也不能解决问题。