2009-07-20 6 views
1

ich diesen Code habeProblem mit grundlegenden Attributen java.sql.Blob

@Entity 
@Table(name = "picture") 
public class Picture implements Serializable { 
    @Id 
    @Column(name = "id") 
    @GeneratedValue 
    private int id; 
    @Column(name = "format", length = 8) 
    private String format; 

    @Basic(fetch = FetchType.LAZY) 
    @Column(name = "context", nullable = true, columnDefinition="mediumblob") 
    @Lob 
    private java.sql.Blob myBlobAttribute; // protected accessor and modifier 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "branch_fk", referencedColumnName = "id", nullable = false) 
    private Branch branch; 
//Some setter and getter 

Ich benutze Netbeans 6.7 und in diesen Ide es mir Fehler in Zeile (private java.sql.Blob myBlobAttribute;) aber Code laufen zeigen und es ist Bild Tabelle auf meiner Datenbank machen ! ist es ein echter Fehler oder nur e-Benachrichtigung und wie muss ich es lösen? Fehlermeldung lautet:

basic attributes can only be of the following types: java primitive types,wrapper of primitive types, String, java.math.bigInteger, java.math.BigDecimal, java,util.Date, java.util.Calendar, java.sql.Data, java.sql.TimeStamp, byte[], Byte[], char[], Character[], enums, or any Serializable type 
+0

'Basis' Attributtyp sollte nicht 'Blob' sein (siehe unten) –

Antwort

1

Ihr Eigenschaftstyp ist java.sql.Blob, die eine Schnittstelle ist.
Vor allem, warum? Sollte es nicht ein Byte-Array sein (vermutlich speichern Sie dort Ihr Bild)?
Zweitens beschwert sich NetBeans - und auch Hibernate, wenn Sie versuchen, Sachen aus dieser Tabelle zu lesen - sie haben keine Möglichkeit zu wissen, welcher tatsächliche Typ erstellt werden muss, um Daten in Ihr Feld zu legen.

+0

ich verstehe nicht, was du meinst! – Am1rr3zA

+0

Ihre Eigenschaft wird als 'private java.sql.Blob myBlobAttribute;' deklariert. 'java.sql.Blob' ist eine Schnittstelle. Wie würde Hibernate wissen, mit was es zu bevölkern ist? Es ist keiner der Typen, für die '@ Basic'-Annotation unterstützt wird - daher der Fehler, den Sie bekommen. Ich schlage vor, dass Sie Ihre Eigenschaft stattdessen als "byte []" deklarieren. – ChssPly76

+0

Tanx, es ist eine gute Idee, aber meine Frage ist, warum dieser Code ausführen und machen Bild-Tabelle und auch ein Kontextfeld (mediumblob Größe) in einer korrekten Art und Größe? Warum den Fehler ignorieren? das ist seltsam für mich !!! – Am1rr3zA

0

Ist das Problem auf der Linie vor?

@Lob 

Sollte sein @Blob vielleicht?

+0

@Blob ist keine Hibernate Annotation – Am1rr3zA

2

Der Grund, dass NetBeans diese Warnung generiert, ist, dass Sie bei Verwendung von java.sql.Blob nur die @Lob-Annotation und nicht @Basic haben sollten.

Zur Laufzeit klingt es jedoch so, als würde Ihre JPA-Implementierung Ihnen "helfen", indem Sie die @Basic-Annotation ignorieren und erkennen, dass die Spalte tatsächlich ein LOB ist. Deshalb funktioniert dein Code. Es ist möglich, dass eine andere JPA-Implementierung fehlschlägt oder sich irgendwie anders verhält.

+0

ok Ich entferne @Basic Annotation aus dem Code, aber ich habe immer noch Fehler !!! Was soll ich tun, dass Netbeans den Fehler nicht anzeigen? Tanx Für Ihre Antwort – Am1rr3zA

+0

Hallo Amirreza. Willst du damit sagen, dass selbst wenn die @Basic-Annotation nicht vorhanden ist, du immer noch genau die gleichen "Basisattribute können nur von den folgenden Typen" erhalten, die von NetBeans kommen? –

Verwandte Themen