2016-05-03 11 views
1

Ich habe Probleme mit JPA. Wir haben eine Datenbank, in der nicht alle Fremdschlüssel konsistent sind. Daher verwenden wir @NotFound(Ignore), siehe Code unten. Aber manchmal wirft es Ausnahmen wie:JPA/Hibernate @NotFound Ignorieren funktioniert nicht, wenn ID = 0

javax.persistence.EntityNotFoundException: Kann nicht com.kiga.s3.domain.S3Image mit id 0

Das geschieht nur finden, wenn der Fremdschlüssel 0 (Wenn ich die ID zu 9999999 in der DB ändern, funktioniert es). Was verursacht dieses Verhalten und was muss ich tun, um es zu beheben?

Hier ist unsere Einheit Code

import org.hibernate.annotations.NotFound; 
import org.hibernate.annotations.NotFoundAction; 
@Entity 
    public class KigaPageImage extends KigaEntityModel { 
     @Column(name = "name") 
     private String title; 
     private String locale; 
     private Long imageId; 

     @ManyToOne 
     @JoinColumn(name = "kigaPageID", referencedColumnName = "id") 
     @NotFound(action = NotFoundAction.IGNORE) 
     private KigaPage kigaPage; 

     @ManyToOne 
     @JoinColumn(name = "s3ImageID", referencedColumnName = "id") 
     @NotFound(action = NotFoundAction.IGNORE) 
     private S3Image s3Image; 

     public S3Image getS3Image() { 
     return s3Image; 
     } 

     public void setS3Image(S3Image s3Image) { 
     this.s3Image = s3Image; 
     } 
    } 

S3Image ID Generation, um eine Verbindung mit

nicht
@Entity 
public class S3Image{ 
    @Id 
    @Column(name = "ID") 
    @GeneratedValue 
    private Long id; 

    @Column(name = "URL") 
    private String url; 
} 

Bezug haben, Peter

+0

@NotFound (was immer das ist) nichts mit JPA zu tun. Vielleicht klar, welches Paket es ist in –

+0

yeah NotFound und NotFoundAction sind beide Ruhezustand, fügte ich die Importe in das Code-Snippet –

+0

Bitte geben Sie die Entität "S3Image". Hat es eine ID-Generation? Wenn dies der Fall ist, beginnt bei den meisten SQL-Servern die Autoinkrement-Funktion bei 1 ... also ID = 0 wird nicht existieren. Wenn Sie ein S3Image mit id = 0 persistieren, wird es als "bis zur nächsten verfügbaren ID zählen" interpretiert. –

Antwort

0

können Sie bestätigen, dass Sie nicht den Zugriff auf die Entität innerhalb einer Schleife, die eine gegebene Entität mehrfach enthält?

Ich vermute, dass der interne Cache von Hibernate etwas damit zu tun haben könnte.

Grüße, Rainer