【发布时间】:2017-11-06 16:40:08
【问题描述】:
我们有基于 Hibernate 的应用程序,由于数据集很大,创建了两组表,其中 user_id 将映射到 UserTickets 表或 RestOfWorldTickets 表中。 想知道如何根据一些用户选择动态映射实体java对象上的@Table。
@Entity
@Table(name = "**UserTickets**")
public class UserTickets {
@Id
@Column("Internal_id")
@GeneratedValue(strategy = IDENTITY)
private int internalId;
@Column("user_id")
private int userId;
@Column("state")
private String state;
@Column("city")
private String city;
@Column("address")
private String address;
@Column("ticketNumber")
private String ticketNumber;
..
// Setters and Getters
}
UserTickets DB Table
Internal_id | User_id | State | City | Address | ticket_number | ...
101 | 1025 | AZ | Tuscan | .. | 10256912 |
102 | 1026 | NC | Durham | .. | 10256983
RestOfWorldTickets DB Table
Internal_id | User_id | State | City | Address | ticket_number |..
101 | 1058 | {null} | London | .. | 102578963 |..
102 | 1059 | {null} | Berlin | .. | 112763458 |..
The user and table mapping are now defined in a new table.
TableMapping Database table.
Internal_id | User_id | TableMapped |
1 | 1025 | UserTickets |
2 | 1026 | UserTickets |
3 | 1058 | RestOfWorldTickets |
4 | 1059 | RestOfWorldTickets |
那么,使用 UserTickets 结果集,我如何将 @Table 属性动态映射到 UserTickets Java 对象上,以便我的 Criteria API 查询将自动工作而无需将它们更改为 HQL 查询?
也许使用拦截器http://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Interceptor.html?
【问题讨论】:
-
我是否理解正确:您有一个用户 ID,并且您想使用该用户 ID 进行查询,并且基于该 ID,它应该针对
UserTickets或RestOfWorldTickets。而且您可能不想使用具有 Internal_id | 的映射表。用户ID |表映射 ?
标签: java hibernate queryinterceptor