2016-11-03 5 views
1

В моем JPA приложения, я использую следующий ЗЕЬЕСТ для извлечения пользователя из базы данных:JPA: Почему идентификатор выбранного объекта null?

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 класс:

@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>()); 
    } 
} 
+0

Вы должны точно указать используемые dbms и тип столбца id. Это может иметь заболеваемость. – davidxxx

+0

Используемый dbms - это MySQL, двоичный тип столбца id (16) – user2035039

ответ

0

Это решает проблему: AppAdmin расширяет BasicUser и я определил поле идентификатора в обоих классах. Стратегия наследования установлена ​​в InheritanceType.JOINED, и удаление id defintion в AppAdmin приводит к повторной загрузке идентификаторов. Тем не менее, я не уверен, что это настоящая причина проблемы, поскольку раньше она работала до тех пор, пока она не перестала работать в какой-то момент.

Смежные вопросы