JPA:为什么所选对象的ID为null?

时间:2016-11-03 18:03:43

标签: java hibernate jpa

在我的JPA应用程序中,我使用以下SELECT语句从数据库中检索用户:

TypedQuery<AppAdmin> query = entityManager.createQuery("SELECT a FROM AppAdmin a WHERE a.username=:username", AppAdmin.class);
query.setParameter("username", username);
AppAdmin user = query.getSingleResult();

但是,即使我检查了数据库中的字段不为空,用户的id字段也始终为null。这种行为可能是什么原因?

以下显示我的AppAdmin课程:

@Entity
@Table(name = "u_userdetails_admin")
public class AppAdmin extends BasicUser {
    /**
     * 
     */
    private static final long serialVersionUID = -41356272870596876L;

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    @Column(name = "id", columnDefinition = "BINARY(16)")
    private UUID id;

    protected AppAdmin(){}

    public AppAdmin(
            @JsonProperty("id") UUID id, 
            @JsonProperty("username") String username,
            @JsonProperty("password") String password, 
            @JsonProperty("registrationDate") LocalDate registrationDate,
            @JsonProperty("locked") boolean locked, 
            @JsonProperty("enabled") boolean enabled,
            @JsonProperty("activationKey") String activationKey,
            @JsonProperty("email") String email) {
        super(id, username, password, registrationDate, locked, enabled, activationKey, email, new ArrayList<String>());
    }
}

1 个答案:

答案 0 :(得分:0)

这解决了问题:AppAdmin扩展BasicUser,我在两个类中定义了一个id字段。继承策略设置为InheritanceType.JOINED,删除AppAdmin中的ID定义会导致ID再次加载。但是,我不确定这是否是问题的真正原因,因为它曾经工作过,直到它在某个时刻停止工作。