2012-05-29 7 views
5

Jest to jednostka zawiera typu blob:Jak używać BLOBa z eBean i grać 2?

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

    ....... 

    @Constraints.Required 
    private Blob image; 

    ....... 
} 

$ grać -DapplyEvolutions.default = true run

dostałem błędy takie jak następujące:

[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] 

Jak mogę dokonać zmiany więc typ kropli może być rozpoznany?

Odpowiedz

10

Aby utworzyć blob z Ebean trzeba użyć tablicy bajtów z @Lob adnotacji

@Lob 
public byte[] image; 

Najprawdopodobniej trzeba konwertować między Plik < - array> bajt, więc może łatwiej przechowywać pliki w systemie plików ? (oprócz przechowywania plików w FS jest po prostu tańsze niż w DB)

Jeśli potrzebujesz specjalnych ograniczeń dostępu, możesz użyć własnego kontrolera, aby sprawdzić uprawnienia i przesłać plik z dysku przez ścieżkę zapisaną w DB.

+0

Dzięki. Dostałem jeden błąd na Heroku z napisem "ERROR: type" blob "nie istnieje". Próbowałem używać "uruchom grę" w moim lokalnym, to działa. Ale nie Heroku. – angelokh

+0

Heroku domyślnie używa PostgreSQL i prawdopodobnie rozwijasz się lokalnie dzięki MySQL (uwaga: staram się tylko zgadywać). Postgres [nie obsługuje bloba] (http://www.postgresql.org/docs/current/interactive/datatype-binary.html) – biesior

Powiązane problemy