mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#211 - ENH: Add support for File as a bean type ... for streaming into/from db
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package com.avaje.tests.model.types;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.File;
|
||||
|
||||
@Entity
|
||||
public class SomeFileBean {
|
||||
|
||||
@Id
|
||||
Long id;
|
||||
|
||||
@Version
|
||||
Long version;
|
||||
|
||||
String name;
|
||||
|
||||
@Lob
|
||||
File file;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Long getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(Long version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public File getFile() {
|
||||
return file;
|
||||
}
|
||||
|
||||
public void setFile(File file) {
|
||||
this.file = file;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package com.avaje.tests.types;
|
||||
|
||||
import com.avaje.ebean.BaseTestCase;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.tests.model.types.SomeFileBean;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URL;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class TestFileType extends BaseTestCase {
|
||||
|
||||
File file = getFile("/profile-image.jpg");
|
||||
File file2 = getFile("/java-64.png");
|
||||
|
||||
@Test
|
||||
public void test_insertNullFile() {
|
||||
|
||||
assertTrue(file.exists());
|
||||
assertTrue(file2.exists());
|
||||
|
||||
SomeFileBean bean0 = new SomeFileBean();
|
||||
bean0.setName("afile");
|
||||
Ebean.save(bean0);
|
||||
|
||||
SomeFileBean bean1 = Ebean.find(SomeFileBean.class)
|
||||
.select("name, file")
|
||||
.setId(bean0.getId())
|
||||
.findUnique();
|
||||
|
||||
assertEquals("afile", bean1.getName());
|
||||
assertNull(bean1.getFile());
|
||||
|
||||
bean1.setFile(file);
|
||||
Ebean.save(bean1);
|
||||
|
||||
SomeFileBean bean2 = Ebean.find(SomeFileBean.class)
|
||||
.select("name, file")
|
||||
.setId(bean0.getId())
|
||||
.findUnique();
|
||||
|
||||
assertEquals("afile", bean2.getName());
|
||||
assertNotNull(bean2.getFile());
|
||||
System.out.println("test_insertNullFile: bean2: "+bean2.getFile());
|
||||
|
||||
Ebean.delete(bean1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_insertUpdateDelete() {
|
||||
|
||||
assertTrue(file.exists());
|
||||
assertTrue(file2.exists());
|
||||
|
||||
SomeFileBean bean0 = new SomeFileBean();
|
||||
bean0.setName("afile");
|
||||
bean0.setFile(file);
|
||||
|
||||
Ebean.save(bean0);
|
||||
|
||||
SomeFileBean bean1 = Ebean.find(SomeFileBean.class)
|
||||
.select("name, file")
|
||||
.setId(bean0.getId())
|
||||
.findUnique();
|
||||
|
||||
assertEquals("afile", bean1.getName());
|
||||
assertNotNull(bean1.getFile());
|
||||
assertEquals(file.length(), bean1.getFile().length());
|
||||
System.out.println("t2 bean1: " + bean1.getFile().getAbsoluteFile());
|
||||
|
||||
bean1.setName("mod-file");
|
||||
bean1.setFile(file2);
|
||||
// update to file2
|
||||
Ebean.save(bean1);
|
||||
|
||||
|
||||
SomeFileBean bean2 = Ebean.find(SomeFileBean.class)
|
||||
.select("name, file")
|
||||
.setId(bean0.getId())
|
||||
.findUnique();
|
||||
|
||||
assertEquals(file2.length(), bean2.getFile().length());
|
||||
System.out.println("t2 bean3: " + bean2.getFile().getAbsoluteFile());
|
||||
|
||||
// update to null
|
||||
bean2.setFile(null);
|
||||
bean2.setName("setNull");
|
||||
Ebean.save(bean2);
|
||||
|
||||
SomeFileBean bean3 = Ebean.find(SomeFileBean.class)
|
||||
.select("name, file")
|
||||
.setId(bean0.getId())
|
||||
.findUnique();
|
||||
|
||||
assertNull(bean3.getFile());
|
||||
System.out.println("t2 bean3: " + bean3.getFile());
|
||||
|
||||
bean3.setName("changeOnlyName");
|
||||
Ebean.save(bean3);
|
||||
|
||||
Ebean.delete(bean3);
|
||||
}
|
||||
|
||||
private File getFile(String resource) {
|
||||
URL url = getClass().getResource(resource);
|
||||
return new File(url.getFile());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package com.avaje.tests.types;
|
||||
|
||||
import com.avaje.ebean.BaseTestCase;
|
||||
import com.avaje.ebean.BeanState;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.tests.model.types.SomeFileBean;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URL;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class TestFileTypeFetching extends BaseTestCase {
|
||||
|
||||
File file = getFile("/profile-image.jpg");
|
||||
File file2 = getFile("/java-64.png");
|
||||
|
||||
@Test
|
||||
public void test_lazyFetch_statelessUpdate() {
|
||||
|
||||
assertTrue(file.exists());
|
||||
|
||||
SomeFileBean bean0 = new SomeFileBean();
|
||||
bean0.setName("one");
|
||||
bean0.setFile(file);
|
||||
Ebean.save(bean0);
|
||||
|
||||
SomeFileBean bean1 = Ebean.find(SomeFileBean.class)
|
||||
.setId(bean0.getId())
|
||||
.findUnique();
|
||||
|
||||
BeanState beanState = Ebean.getBeanState(bean1);
|
||||
Set<String> loadedProps = beanState.getLoadedProps();
|
||||
assertTrue(loadedProps.contains("name"));
|
||||
assertFalse(loadedProps.contains("file"));
|
||||
|
||||
File file1 = bean1.getFile();
|
||||
assertEquals(file.length(), file1.length());
|
||||
|
||||
|
||||
SomeFileBean statelessUpdateBean = new SomeFileBean();
|
||||
statelessUpdateBean.setId(bean0.getId());
|
||||
statelessUpdateBean.setFile(file2);
|
||||
|
||||
// perform stateless update (handy)
|
||||
Ebean.update(statelessUpdateBean);
|
||||
|
||||
SomeFileBean bean2 = Ebean.find(SomeFileBean.class)
|
||||
.select("file")
|
||||
.setId(bean0.getId())
|
||||
.findUnique();
|
||||
|
||||
assertEquals(file2.length(), bean2.getFile().length());
|
||||
|
||||
Ebean.delete(bean1);
|
||||
}
|
||||
|
||||
private File getFile(String resource) {
|
||||
URL url = getClass().getResource(resource);
|
||||
return new File(url.getFile());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user