diff --git a/libraries-data/pom.xml b/libraries-data/pom.xml
index 5b34a903ce..bbf0c7832f 100644
--- a/libraries-data/pom.xml
+++ b/libraries-data/pom.xml
@@ -148,42 +148,42 @@
${jmapper.version}
-
- org.apache.crunch
- crunch-core
- ${org.apache.crunch.crunch-core.version}
-
-
- org.apache.hadoop
- hadoop-client
- ${org.apache.hadoop.hadoop-client}
- provided
-
+
+ org.apache.crunch
+ crunch-core
+ ${org.apache.crunch.crunch-core.version}
+
+
+ org.apache.hadoop
+ hadoop-client
+ ${org.apache.hadoop.hadoop-client}
+ provided
+
-
- commons-cli
- commons-cli
- 1.2
- provided
-
-
- commons-io
- commons-io
- 2.1
- provided
-
-
- commons-httpclient
- commons-httpclient
- 3.0.1
- provided
-
-
- commons-codec
- commons-codec
-
-
-
+
+ commons-cli
+ commons-cli
+ 1.2
+ provided
+
+
+ commons-io
+ commons-io
+ 2.1
+ provided
+
+
+ commons-httpclient
+ commons-httpclient
+ 3.0.1
+ provided
+
+
+ commons-codec
+ commons-codec
+
+
+
org.apache.flink
flink-connector-kafka-0.11_2.11
@@ -249,7 +249,32 @@
${awaitility.version}
test
+
+ io.ebean
+ ebean
+ ${ebean.version}
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+ ch.qos.logback
+ logback-core
+ ${logback.version}
+
+
+ org.slf4j
+ slf4j-log4j12
+ ${slf4j.version}
+
@@ -354,31 +379,48 @@
-
- org.apache.maven.plugins
- maven-assembly-plugin
- 2.3
-
-
- src/main/assembly/hadoop-job.xml
-
-
-
- com.baeldung.crunch.WordCount
-
-
-
-
-
- make-assembly
- package
-
- single
-
-
-
-
-
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 2.3
+
+
+ src/main/assembly/hadoop-job.xml
+
+
+
+ com.baeldung.crunch.WordCount
+
+
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+ io.ebean
+ ebean-maven-plugin
+ 11.11.2
+
+
+
+ main
+ process-classes
+
+ debug=1
+
+
+ enhance
+
+
+
+
@@ -415,7 +457,10 @@
5.0.4
1.6.0.1
0.15.0
- 2.2.0
+ 2.2.0
+ 11.22.4
+ 1.7.25
+ 1.0.1
diff --git a/libraries-data/src/main/java/com/baeldung/ebean/app/App.java b/libraries-data/src/main/java/com/baeldung/ebean/app/App.java
new file mode 100644
index 0000000000..44a4fa8562
--- /dev/null
+++ b/libraries-data/src/main/java/com/baeldung/ebean/app/App.java
@@ -0,0 +1,75 @@
+package com.baeldung.ebean.app;
+
+import java.util.Arrays;
+
+import com.baeldung.ebean.model.Address;
+import com.baeldung.ebean.model.Customer;
+
+import io.ebean.Ebean;
+import io.ebean.EbeanServer;
+import io.ebean.annotation.Transactional;
+
+public class App {
+
+ public static void main(String[] args) {
+ insertAndDeleteInsideTransaction();
+ crudOperations();
+ queryCustomers();
+ }
+
+ @Transactional
+ public static void insertAndDeleteInsideTransaction() {
+
+ Customer c1 = getCustomer();
+ EbeanServer server = Ebean.getDefaultServer();
+ server.save(c1);
+ Customer foundC1 = server.find(Customer.class, c1.getId());
+ server.delete(foundC1);
+ }
+
+ public static void crudOperations() {
+
+ Address a1 = new Address("5, Wide Street", null, "New York");
+ Customer c1 = new Customer("John Wide", a1);
+
+ EbeanServer server = Ebean.getDefaultServer();
+ server.save(c1);
+
+ c1.setName("Jane Wide");
+ c1.setAddress(null);
+ server.save(c1);
+
+ Customer foundC1 = Ebean.find(Customer.class, c1.getId());
+
+ Ebean.delete(foundC1);
+ }
+
+ public static void queryCustomers() {
+ Address a1 = new Address("1, Big Street", null, "New York");
+ Customer c1 = new Customer("Big John", a1);
+
+ Address a2 = new Address("2, Big Street", null, "New York");
+ Customer c2 = new Customer("Big John", a2);
+
+ Address a3 = new Address("3, Big Street", null, "San Jose");
+ Customer c3 = new Customer("Big Bob", a3);
+
+ Ebean.saveAll(Arrays.asList(c1, c2, c3));
+
+ Customer customer = Ebean.find(Customer.class)
+ .select("name")
+ .fetch("address", "city")
+ .where()
+ .eq("city", "San Jose")
+ .findOne();
+
+ Ebean.deleteAll(Arrays.asList(c1, c2, c3));
+ }
+
+ private static Customer getCustomer() {
+ Address a1 = new Address("1, Big Street", null, "New York");
+ Customer c1 = new Customer("Big John", a1);
+ return c1;
+ }
+
+}
diff --git a/libraries-data/src/main/java/com/baeldung/ebean/app/App2.java b/libraries-data/src/main/java/com/baeldung/ebean/app/App2.java
new file mode 100644
index 0000000000..fba77007c6
--- /dev/null
+++ b/libraries-data/src/main/java/com/baeldung/ebean/app/App2.java
@@ -0,0 +1,26 @@
+package com.baeldung.ebean.app;
+
+import java.util.Properties;
+
+import io.ebean.EbeanServer;
+import io.ebean.EbeanServerFactory;
+import io.ebean.config.ServerConfig;
+
+public class App2 {
+
+ public static void main(String[] args) {
+ ServerConfig cfg = new ServerConfig();
+ cfg.setDefaultServer(true);
+ Properties properties = new Properties();
+ properties.put("ebean.db.ddl.generate", "true");
+ properties.put("ebean.db.ddl.run", "true");
+ properties.put("datasource.db.username", "sa");
+ properties.put("datasource.db.password", "");
+ properties.put("datasource.db.databaseUrl", "jdbc:h2:mem:app2");
+ properties.put("datasource.db.databaseDriver", "org.h2.Driver");
+ cfg.loadFromProperties(properties);
+ EbeanServer server = EbeanServerFactory.create(cfg);
+
+ }
+
+}
diff --git a/libraries-data/src/main/java/com/baeldung/ebean/model/Address.java b/libraries-data/src/main/java/com/baeldung/ebean/model/Address.java
new file mode 100644
index 0000000000..dfcd90ffa7
--- /dev/null
+++ b/libraries-data/src/main/java/com/baeldung/ebean/model/Address.java
@@ -0,0 +1,48 @@
+package com.baeldung.ebean.model;
+
+import javax.persistence.Entity;
+
+@Entity
+public class Address extends BaseModel {
+
+ public Address(String addressLine1, String addressLine2, String city) {
+ super();
+ this.addressLine1 = addressLine1;
+ this.addressLine2 = addressLine2;
+ this.city = city;
+ }
+
+ private String addressLine1;
+ private String addressLine2;
+ private String city;
+
+ public String getAddressLine1() {
+ return addressLine1;
+ }
+
+ public void setAddressLine1(String addressLine1) {
+ this.addressLine1 = addressLine1;
+ }
+
+ public String getAddressLine2() {
+ return addressLine2;
+ }
+
+ public void setAddressLine2(String addressLine2) {
+ this.addressLine2 = addressLine2;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public void setCity(String city) {
+ this.city = city;
+ }
+
+ @Override
+ public String toString() {
+ return "Address [id=" + id + ", addressLine1=" + addressLine1 + ", addressLine2=" + addressLine2 + ", city=" + city + "]";
+ }
+
+}
diff --git a/libraries-data/src/main/java/com/baeldung/ebean/model/BaseModel.java b/libraries-data/src/main/java/com/baeldung/ebean/model/BaseModel.java
new file mode 100644
index 0000000000..547d5bf075
--- /dev/null
+++ b/libraries-data/src/main/java/com/baeldung/ebean/model/BaseModel.java
@@ -0,0 +1,59 @@
+package com.baeldung.ebean.model;
+
+import java.time.Instant;
+
+import javax.persistence.Id;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Version;
+
+import io.ebean.annotation.WhenCreated;
+import io.ebean.annotation.WhenModified;
+
+@MappedSuperclass
+public abstract class BaseModel {
+
+ @Id
+ protected long id;
+
+ @Version
+ protected long version;
+
+ @WhenCreated
+ protected Instant createdOn;
+
+ @WhenModified
+ protected Instant modifiedOn;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public Instant getCreatedOn() {
+ return createdOn;
+ }
+
+ public void setCreatedOn(Instant createdOn) {
+ this.createdOn = createdOn;
+ }
+
+ public Instant getModifiedOn() {
+ return modifiedOn;
+ }
+
+ public void setModifiedOn(Instant modifiedOn) {
+ this.modifiedOn = modifiedOn;
+ }
+
+ public long getVersion() {
+ return version;
+ }
+
+ public void setVersion(long version) {
+ this.version = version;
+ }
+
+}
diff --git a/libraries-data/src/main/java/com/baeldung/ebean/model/Customer.java b/libraries-data/src/main/java/com/baeldung/ebean/model/Customer.java
new file mode 100644
index 0000000000..4dd629245a
--- /dev/null
+++ b/libraries-data/src/main/java/com/baeldung/ebean/model/Customer.java
@@ -0,0 +1,42 @@
+package com.baeldung.ebean.model;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.OneToOne;
+
+@Entity
+public class Customer extends BaseModel {
+
+ public Customer(String name, Address address) {
+ super();
+ this.name = name;
+ this.address = address;
+ }
+
+ private String name;
+
+ @OneToOne(cascade = CascadeType.ALL)
+ Address address;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Address getAddress() {
+ return address;
+ }
+
+ public void setAddress(Address address) {
+ this.address = address;
+ }
+
+ @Override
+ public String toString() {
+ return "Customer [id=" + id + ", name=" + name + ", address=" + address + "]";
+ }
+
+}
diff --git a/libraries-data/src/main/resources/ebean.mf b/libraries-data/src/main/resources/ebean.mf
new file mode 100644
index 0000000000..f49fecc717
--- /dev/null
+++ b/libraries-data/src/main/resources/ebean.mf
@@ -0,0 +1,3 @@
+entity-packages: com.baeldung.ebean.model
+transactional-packages: com.baeldung.ebean.app
+querybean-packages: com.baeldung.ebean.app
diff --git a/libraries-data/src/main/resources/ebean.properties b/libraries-data/src/main/resources/ebean.properties
new file mode 100644
index 0000000000..9cc5cc170a
--- /dev/null
+++ b/libraries-data/src/main/resources/ebean.properties
@@ -0,0 +1,7 @@
+ebean.db.ddl.generate=true
+ebean.db.ddl.run=true
+
+datasource.db.username=sa
+datasource.db.password=
+datasource.db.databaseUrl=jdbc:h2:mem:customer
+datasource.db.databaseDriver=org.h2.Driver
diff --git a/libraries-data/src/main/resources/logback.xml b/libraries-data/src/main/resources/logback.xml
index 7d900d8ea8..a57d22fcb2 100644
--- a/libraries-data/src/main/resources/logback.xml
+++ b/libraries-data/src/main/resources/logback.xml
@@ -6,7 +6,9 @@
-
+
+
+