2016-11-03 1 views
1

In meiner JPA-Anwendung, ich bin mit der folgenden SELECT-Anweisung einen Benutzer aus der Datenbank abgerufen werden:JPA: Warum ist die ID des ausgewählten Objekts 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(); 

Allerdings ist der ID-Feld des Benutzers immer null, obwohl ich, dass das Feld nicht null geprüft ist in die Datenbank. Was könnte die Ursache für dieses Verhalten sein?

Die folgende Abbildung zeigt meine AppAdmin Klasse:

@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

Sie sollten die verwendeten dbms und den ID-Spaltentyp präzisieren. Es kann vorkommen. – davidxxx

+0

Das verwendete dbms ist MySQL, der ID-Spaltentyp binary (16) – user2035039

Antwort

0

Dies löst das Problem: AppAdmin erstreckt BasicUser und I definiert in beiden Klassen ein ID-Feld. Die Vererbungsstrategie ist auf InheritanceType.JOINED festgelegt und das Entfernen der ID-Definition in AppAdmin bewirkt, dass die IDs erneut geladen werden. Ich bin mir jedoch nicht sicher, ob dies die eigentliche Ursache des Problems ist, da es früher so lange gearbeitet hat, bis es irgendwann aufgehört hat zu arbeiten.

Verwandte Themen