2008-10-10 7 views

Répondre

5

Nous faisons exactement cela avec le "original" Java Hibernate3. Vous mappez simplement une propriété de tableau d'octets de votre classe persistante dans une colonne de type "image".

package com.hibernate.pdf.sample; 

public class TPDFDocument implements java.io.Serializable { 


     private Integer pdfDocumentId; 
     private byte[] document; 


     public Integer getPdfDocumentId() { 
      return this.pdfDocumentId; 
     } 

     public void setPdfDocumentId(Integer pdfDocumentId) { 
      this.pdfDocumentId = pdfDocumentId; 
     } 

     public byte[] getDocument() { 
      return this.document; 
     } 

     public void setDocument(byte[] document) { 
      this.document = document; 
     } 

} 

Hibernate Mapping:

<hibernate-mapping> 
    <class name="com.hibernate.pdf.sample.TPDFDocument" table="T_PDFDocument"> 
     <id name="pdfDocumentId" type="integer"> 
      <column name="pdfDocumentId" /> 
      <generator class="identity" /> 
     </id> 
     <property name="document" type="binary"> 
      <column name="document" not-null="true" /> 
     </property> 
    </class> 
</hibernate-mapping> 

création de la table:

CREATE TABLE [dbo].[T_PDFDocument](
    [pdfDocumentId] [int] IDENTITY(1,1) NOT NULL, 
    [document] [image] NOT NULL, 
CONSTRAINT [PK_PDFDocument] PRIMARY KEY CLUSTERED 
(
    [pdfDocumentId] ASC 
) 

Tout ce que vous avez à faire est de lire les documents octets bruts dans le tableau et persister il. Dans notre cas, les documents ne dépasseront guère 1Mo, donc le fait de placer le tout dans le byte-array ne causera pas de problèmes de performance. Peut-être que cette solution n'est pas faisable pour les documents très volumineux.

Je suppose qu'avec l'implémentation de NHibernate et C#, la solution sera très similaire.

0

INSERT INTO table (DocumentId, PDF) VALEURS (newid(), 0x12345667)

où la constante hexagonale est le bytestream de hex-codée de la PDF.

Je suis sûr que quelqu'un peut trouver un meilleur moyen, mais c'est évident pour moi.

0

Avez-vous besoin de mettre le PDF dans le tableau? Vous pouvez enregistrer le fichier dans le système de fichiers et le référencer avec un ID. Cela vous permettrait d'économiser de l'espace sur SQL Server. Je ne crois pas que vous puissiez indexer des données binaires de toute façon.