我们可以在 Hibernate 中有选择地获取关联连接对象的列吗?
Can we selectively fetch the columns of an associated joined object in Hibernate?
@Entity
@Table(name = "USER_INFO")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "USER_ID")
private int userId;
@OneToOne
@JoinColumn(name = "CGH_SOE_ID", referencedColumnName = "CGH_SOE_ID", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))
@Fetch(FetchMode.JOIN)
private UserDimension userDimension;
.......
@Entity
@Table(name = "USER_DIMENSION")
public class UserDimension {
@Column(name = "EMPLID", length = 11)
private String employeeLid;
@Id
@Column(name = "CGH_SOE_ID", length = 10, nullable = false)
private String CGHSOEId;
我使用 Criteria 查询从数据库中获取用户对象,并且用户维度与其相关联。
1) 当我从数据库中获取用户对象时,我只想从 UserDimension 中获取 2-3 列。
2) 我可以在所有列提取和选定列提取之间动态切换吗?
谢谢
最简单的答案你做不到。 Hibernate 检索实体中提到的所有列。
可能的解决方法:
您可以基于相同的表但列数有限,再定义 2 个实体 UserShort 和 UserDimensionShort。
使用 JdbcTemplate,您可以在其中触发 SQL 查询(仅包含所需的列)并添加映射以将列数据获取到实体字段。 (参见 the example)
@Entity
@Table(name = "USER_INFO")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "USER_ID")
private int userId;
@OneToOne
@JoinColumn(name = "CGH_SOE_ID", referencedColumnName = "CGH_SOE_ID", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))
@Fetch(FetchMode.JOIN)
private UserDimension userDimension;
.......
@Entity
@Table(name = "USER_DIMENSION")
public class UserDimension {
@Column(name = "EMPLID", length = 11)
private String employeeLid;
@Id
@Column(name = "CGH_SOE_ID", length = 10, nullable = false)
private String CGHSOEId;
我使用 Criteria 查询从数据库中获取用户对象,并且用户维度与其相关联。
1) 当我从数据库中获取用户对象时,我只想从 UserDimension 中获取 2-3 列。
2) 我可以在所有列提取和选定列提取之间动态切换吗?
谢谢
最简单的答案你做不到。 Hibernate 检索实体中提到的所有列。
可能的解决方法:
您可以基于相同的表但列数有限,再定义 2 个实体 UserShort 和 UserDimensionShort。
使用 JdbcTemplate,您可以在其中触发 SQL 查询(仅包含所需的列)并添加映射以将列数据获取到实体字段。 (参见 the example)