更改hibernate托管实体的包名称

时间:2016-03-02 06:13:55

标签: java hibernate hibernate-criteria

在进行一些重构后,将一些类移动到不同的包中,我在使用条件构建器查询数据库时开始看到以下错误:

Date

如果我将包名更改回in.helpi.ironlegion.cerebro.db.hibernate.entity,它可以正常工作。

更新 我能够正确地获取个体实体。但是当我去查询引用其他实体的实体时,我得到了这个错误。例如:

java.lang.IllegalArgumentException: Parameter value [in.helpi.ironlegion.db.hibernate.entity.UserEntity@1863fc] did not match expected type [in.helpi.ironlegion.cerebro.db.hibernate.entity.UserEntity

如果我使用条件构建器在用户上查询它,请执行以下操作:

public class CommunityAccessEntity extends BaseEnity {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private Long id;


    @ManyToOne
    @JoinColumn(name = "UserEntity_id")
    private UserEntity userEntity;
...
}

我收到了上述错误。

有人也遇到过类似的问题..

1 个答案:

答案 0 :(得分:1)

您必须在实体类中实现Serializable接口,因为它是实体类的拇指规则之一。

Java序列化与类名和包名紧密结合。您的数据与旧包实体一起存储在数据库中。现在您更改了软件包名称,系统将无法使用您的新软件包在DB中查找记录。这就是为什么当你恢复包时,它可以工作。

如果您正在使用基于xml的hbm配置,请检查hbm文件是否已在所有位置更新新包。