Here you go..
package com.janilaakso;
import com.janilaakso.domain.Person;
import com.janilaakso.domain.Company;
import com.orientechnologies.orient.core.db.object.ODatabaseObjectTx;
public class TestMain {
public static String dbUrl = "local:/tmp/orient-database-test/foo";
private ODatabaseObjectTx db = null;
public static void main(String[] args) {
new TestMain().startup();
}
public void startup() {
db = new ODatabaseObjectTx(dbUrl);
if (db.exists()) {
db.open("admin", "admin");
} else {
System.out.println("Creating new database");
db.create();
}
db.getEntityManager().registerEntityClasses("com.janilaakso.domain");
try {
showElements("Before");
// Store without transaction goes OK
Company company = new Company();
company.setName("Vaadin Ltd ");
Person person = new Person();
person.setFirstname("Jani Laakso");
person.setCompany(company);
db.save(person);
// At this point I got 1 person and 1 company on the database
showElements("Without save");
// Store with transaction NOT OK
Company company2 = new Company();
company2.setName("Vaadin Ltd ");
Person person2 = new Person();
person2.setFirstname("Jani Laakso");
db.begin();
person2.setCompany(company2);
db.save(person2);
db.commit();
// At this point I got 2 person and 1 (!) company on the database
showElements("After save with TX");
} finally {
db.close();
}
}
private void showElements(String desc) {
System.out.println(desc + "--- " + Thread.currentThread());
for (String name : db.getClusterNames()) {
System.out
.println(name + " count=" + db.countClusterElements(name));
}
}
}
package com.janilaakso.domain;
public class Company {
private String name = null;
private String address = null;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAddress(String address) {
this.address = address;
}
public String getAddress() {
return address;
}
@Override
public String toString() {
return super.toString() + ": name=" + name;
}
}
package com.janilaakso.domain;
public class Person {
private String firstname;
private String lastname;
private Company company;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public void setCompany(Company company) {
this.company = company;
}
public Company getCompany() {
return company;
}
@Override
public String toString() {
return super.toString() + ": firstname=" + firstname + ", lastname="
+ lastname + ", company=" + company;
}
}