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

Java JPA:为什么所选对象的ID为空?,java,hibernate,jpa,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();

在我的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();

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

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

您应该精确指定使用的dbms和id列类型。它可能有关联性。使用的dbms是MySQL,id列类型是二进制的(16)。您应该精确使用的dbms和id列类型。它可能有关联。使用的dbms是MySQL,id列类型为二进制(16)
@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>());
    }
}