2016-08-16 115 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

相关问题