package info.noteo;
import java.util.List;
@Entity
@NoSql(dataFormat=DataFormatType.MAPPED, dataType="personne")
public class Person {
@Id
@GeneratedValue
@Field(name="_id")
private String personId;
@Column(name = "PERSON_NAME")
private String personName;
@Embedded
PersonalData personalData;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name="ADDRESSES")
private List<Address> addresses;
public String getPersonId() {
return personId;
}
public void setPersonId(String personId) {
this.personId = personId;
}
public String getPersonName() {
return personName;
}
public void setPersonName(String personName) {
this.personName = personName;
}
public PersonalData getPersonalData() {
return personalData;
}
public void setPersonalData(PersonalData personalData) {
this.personalData = personalData;
}
public List<Address> getAddresses() {
return addresses;
}
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
}
package info.noteo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.eclipse.persistence.annotations.Convert;
import org.eclipse.persistence.annotations.Converter;
import org.eclipse.persistence.nosql.annotations.DataFormatType;
import org.eclipse.persistence.nosql.annotations.Field;
import org.eclipse.persistence.nosql.annotations.NoSql;
@Entity
@NoSql(dataFormat=DataFormatType.MAPPED, dataType="adresse")
public class Address {
@Id
@GeneratedValue
@Field(name="_id")
private String addressId;
private String street;
public String getAddressId() {
return addressId;
}
public void setAddressId(String addressId) {
this.addressId = addressId;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
}
package info.noteo;
import java.util.ArrayList;
public class EclipseLinkTest {
private static final String PERSISTENCE_UNIT_NAME = "nosql-pu";
private final EntityManagerFactory entityManagerFactory;
private final EntityManager entityManager;
private final JpaEntityManager jpa;
private final ServerSession serverSession;
public EclipseLinkTest() {
// initializations
entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
entityManager = entityManagerFactory.createEntityManager();
jpa = (JpaEntityManager) entityManager.getDelegate();
serverSession = jpa.getServerSession();
}
public UnitOfWork acquireUnitOfWork() {
return serverSession.acquireClientSession().acquireUnitOfWork();
}
public static void main(String[] args) {
EclipseLinkTest main = new EclipseLinkTest();
UnitOfWork uow = main.acquireUnitOfWork();
// create 1 person and 2 address
Person person = new Person();
//person.setPersonId("1");
person.setPersonName("John Smith");
person.setPersonalData(new PersonalData("john.smith@gmail.com",
"www.johnsmith.com", "jsmith"));
List<Address> addresses = new ArrayList<Address>();
Address address1 = new Address();
//address1.setAddressId("111");
address1.setStreet("123, Old street");
Address address2 = new Address();
//address2.setAddressId("222");
address2.setStreet("456, New street");
addresses.add(address1);
addresses.add(address2);
uow.registerNewObject(address1);
uow.registerNewObject(address2);
person.setAddresses(addresses);
// register users in UnitOfWork
uow.registerNewObject(person);
// commit transaction
uow.commit();
// now try to read our users
ReadAllQuery raq = new ReadAllQuery(Person.class);
@SuppressWarnings("unchecked")
String id = "";
List<Person> users = (List<Person>) uow.executeQuery(raq);
for (Person u : users) {
System.out.println("Person: " + u.getPersonName());
System.out.println("Identifiant Person :"+u.getPersonId());
id = u.getPersonId();
}
// recherche une personne avec son ID
Person p1= main.entityManager.find(Person.class, id);
p1.getAddresses().get(0); // this throw and Exception !
}
}
<persistence-unit name="nosql-pu" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>info.noteo.Person</class>
<class>info.noteo.Address</class>
<properties>
<property name="eclipselink.target-database" value="org.eclipse.persistence.nosql.adapters.mongo.MongoPlatform" />
<property name="eclipselink.nosql.connection-spec" value="org.eclipse.persistence.nosql.adapters.mongo.MongoConnectionSpec" />
<property name="eclipselink.nosql.property.mongo.port" value="27017" />
<property name="eclipselink.nosql.property.mongo.host" value="localhost" />