2009-07-20 28 views
1

我有這樣的代碼問題基本屬性的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 

我使用NetBeans 6.7,並在這個IDE它告訴我就行(private java.sql.Blob myBlobAttribute;) 但是代碼的運行錯誤,它使我的數據庫圖像表! 這是一個真正的錯誤還是隻是通知,我必須如何解決它? 錯誤信息是:

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

'基本'屬性類型不應該是'Blob'(參見下面) – 2012-11-21 17:03:42

回答

1

您的房屋類型是java.sql.Blob這是一個界面。
首先,爲什麼?它不應該是一個字節數組(大概是你存儲圖像的地方)?其次,這就是NetBeans抱怨的原因 - 一旦你嘗試從這個表中讀取東西,Hibernate也會這樣 - 他們無法知道在你的領域中要創建什麼類型的實際數據。

+0

我不會說出你的意思! – Am1rr3zA 2009-07-20 19:16:42

+0

你的屬性被聲明爲`private java.sql.Blob myBlobAttribute;`。 `java.sql.Blob`是一個接口。 Hibernate如何知道如何填充它?它不是支持`@ Basic`註釋的類型之一 - 因此你得到的錯誤。我建議你將你的屬性聲明爲`byte []`。 – ChssPly76 2009-07-20 19:24:56

0

問題就行了嗎?

@Lob 

應該是@Blob也許?

+0

@Blob不是休眠註釋 – Am1rr3zA 2009-07-20 14:46:23

2

NetBeans產生此警告的原因是,使用java.sql.Blob時,應該只有@Lob註釋而不是@Basic。

但是,在運行時,聽起來好像你的JPA實現是通過忽略@Basic註解和識別該列實際上是一個LOB來「幫助你」。這就是你的代碼工作的原因。一個不同的JPA實現可能會失敗或以某種方式表現不同。