Java JPA:为什么所选对象的ID为空?
在我的JPA应用程序中,我使用以下SELECT语句从数据库检索用户: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();
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
extendsBasicUser
,我在这两个类中定义了一个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>());
}
}