2012-05-29 14 views
5

Questo è l'entità contiene tipo blob:Come usare blob con ebean e giocare 2?

@Entity 
@Table(name="image_info") 
public class ImageInfo extends Model { 

    ....... 

    @Constraints.Required 
    private Blob image; 

    ....... 
} 

$ giocano -DapplyEvolutions.default = true corsa

ho ottenuto errori come il seguente:

[warn] c.j.b.ConnectionPartition - BoneCP detected an unclosed connection and will now attempt to close it for you. You should be closing this connection in your application - enable connectionWatch for additional debugging assistance. 
[error] c.a.e.s.t.r.ImmutableMetaFactory - Was unable to use reflection to find a constructor and appropriate getters forimmutable type interface java.sql.Blob. The errors while looking for the getter methods follow: 
[error] c.a.e.s.d.p.DeployCreateProperties - Error with models.ImageInfo field:image 
java.lang.RuntimeException: Unable to use reflection to build ImmutableMeta for interface  java.sql.Blob. Associated Errors trying to find a constructor and getter methods have been logged 
at com.avaje.ebeaninternal.server.type.reflect.ImmutableMetaFactory.createImmutableMeta(ImmutableMetaFactory.java:71) ~[ebean.jar:na] 
at com.avaje.ebeaninternal.server.type.DefaultTypeManager.recursiveCreateScalarTypes(DefaultTypeManager.java:227) ~[ebean.jar:na] 
at com.avaje.ebeaninternal.server.deploy.parse.DeployCreateProperties.createProp(DeployCreateProperties.java:357) [ebean.jar:na] 
at com.avaje.ebeaninternal.server.deploy.parse.DeployCreateProperties.createProp(DeployCreateProperties.java:377) [ebean.jar:na] 
at com.avaje.ebeaninternal.server.deploy.parse.DeployCreateProperties.createProperties(DeployCreateProperties.java:168) [ebean.jar:na] 
at com.avaje.ebeaninternal.server.deploy.parse.DeployCreateProperties.createProperties(DeployCreateProperties.java:94) [ebean.jar:na] 

Come potrei fare il cambiamento quindi il tipo blob può essere riconosciuto?

risposta

10

Per creare blob con Ebean è necessario utilizzare array di byte con @Lob annotazione

@Lob 
public byte[] image; 

Molto probabilmente sarà necessario per la conversione tra file < - serie> di byte, quindi forse è più facile da memorizzare i file in file system ? (oltre la memorizzazione di file in FS è solo più economico rispetto a DB)

Se sono necessarie restrizioni di accesso speciali, è possibile utilizzare il proprio controller per verificare le autorizzazioni e lo streaming del file dal disco in base al percorso memorizzato nel DB.

+0

Grazie. Ho ricevuto un errore su Heroku che diceva "ERRORE: scrivi" blob "non esiste". Ho provato a utilizzare 'play run' nel mio locale, funziona. Ma non Heroku. – angelokh

+0

Heroku usa Postgres di default e probabilmente stai sviluppando localmente con MySQL (nota: sto solo cercando di indovinare). Postgres [non supporta blob] (http://www.postgresql.org/docs/current/interactive/datatype-binary.html) – biesior

Problemi correlati