我正在使用 Spring 3.2 和 hibernate-core 4.1.4 和 hibernate-jpa-2.0.1。应用程序资源文件具有所有正确的对象。
我有一个子对象 RoleEntity,它有两个父对象:User 和 Award,因此 userId 和 AwardId 是已经存在的外键,并且必须存在才能创建角色实体。
public class RoleEntity implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "role_id")
private long roleId;
@Column(name = "role_description")
private String roleDescription;
@Column(name = "role_name")
private String roleName;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private UserEntity user;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "award_id")
private AwardEntity award;
... getters/setters
... hash/equals/toString
}
我的 DAO 插入看起来很简单:
@Override
public RoleEntity saveRoleEntity(RoleEntity role)
{
logger.debug("saveRoleEntity: role=" + role);
return role;
}
我已经对该代码进行了单元测试,并且可以确认,当我选择现有的 roleId 时,我可以完全取回加载的对象,并且完全填充了 User 和 Award。
但是,当我插入新角色时,我会执行以下操作:
- 将 roleId 设置为 0,并将角色描述...
- 创建一个userEntity并只设置id,这个id已经存在并且不是新的
- 创建一个awardEntity并只设置id,这个id已经存在并且不是新的
我可以成功保存,这太棒了!!!!为我工作。而在新的对象返回中,我可以清楚的看到新的roleId返回给我了!!!RoleEntity 的所有其他字段,例如描述,都在那里。
但是,我还想要完全填充 RoleEntity 的 User 和 Award 字段,就好像我在插入后进行了选择一样。这甚至可能吗?
我宁愿不对用户和奖励表进行选择以获取这些对象,然后将它们分配给该对象,但如果我必须这样做,那很好。
如果我需要提供更多信息,请告诉我。感谢您提前提供任何帮助。