2016-08-16 48 views
0

我要存儲列表的文件在MYSQL數據庫中的單個列,在我的MySQL我有以下列 附件LONGBLOB如何將文件的列表存儲在MYSQL數據庫

和映射文件我有, @ Lob @Column(name =「ATTACHMENT」) /私人列表附件;/ 私人列表附件;

但我越來越java.lang.ClassCastException:java.util.ArrayList不能轉換爲java.sql.Blob,因爲我使用列表。

有什麼方法可以在單列中存儲文件列表(.jpg,.txt和.zip文件)嗎? 任何幫助將不勝感激。

@Entity 
@Table(name="file_details") 
@NamedQuery(name="FileDetail.findAll", query="SELECT c FROM FileDetailc") 
public class FileDetailimplements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(generator="customGenerator") 
    @GenericGenerator(name="customGenerator", strategy="com.abc.generator.ContactIdentifierGenerator") 
    @Column(name="ID") 
    private int id; 

    @Column(name="DESCRIPTION") 
    private String description; 

    @Lob 
    @Column(name="ATTACHMENT") 
    /*private List<MultipartFile> attachment;*/ 
    private byte[] attachment; 

    @Column(name="USER_EMAIL_ID", insertable=false, updatable=false) 
    private String userEmailId; 

    @ManyToOne 
    @JoinColumn(name="USER_EMAIL_ID") 
    private UserDetail userDetail; 


//getters and setters 
+1

何不是否將單個文件存儲爲每個記錄的BLOB,每列? –

+0

你是指文件的內容?或者關於文件的元數據:名稱,修改日期,大小等等? –

+0

@Tim Biegeleisen-用戶可以上傳任意數量的文件,所以如果我們不能。每列存儲一個文件。 @ Basil Bourque - 文件的內容 – Thej

回答

0

這沒有什麼意義。爲什麼你想要把所有的文件放在一列中。即使將所有文件按字節合併並將其存儲在單個列中,也幾乎不可能分別讀取它們。

你可以存儲在通過分隔一個柱分離文件的不同的表和存儲名稱的文件

1

你必須創建另一個實體(你可以把它叫做附件),該實體將有一個屬性文件和與實際攜帶文件列表的實體之間的一對多關係。 比方說你的實際代碼是這樣的:

@Entity 
public class User{ 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private long id; 

@Lob @Column(name="ATTACHMENT") 
private List<File> attachments; 

} 

你必須修改你的用戶實體的:

@Entity 
public class User{ 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private long id; 

@OneToMany(mappedBy="owner") 
private List<Attachment> attachments; 

} 

,並創建連接實體是這樣的:

 @Entity 
    public class Attachment { 

     @Id 
     @GeneratedValue(strategy=GenerationType.IDENTITY) 
     private long id; 

     @Lob @Column(name="ATTACHMENT") 
     private File file; 

     @ManyToOne 
     private User owner; 

     } 
+0

像這樣,你將文件保存在數據庫的一個單獨的表中,每個文件在一行中(每行包含一個文件和一個fk引用該文件所屬的實體)。 – Elgayed

+0

你能舉個例子嗎? – Thej

+0

你可以請發佈你的實體代碼嗎? – Elgayed

相關問題