Address has many-to-one relationship with person like :
Person :
@Id
@Column(name="personid")
private Long personId;
private String firstName;
private String lastName;
private String email;
@OneToMany(cascade = CascadeType.ALL,mappedBy="person",targetEntity=Address.class,fetch=FetchType.LAZY)
private List addressArray=new ArrayList<>();
public Person() {
}
and Address :
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="personId")
private Person person;
I want to access person's firstname from the address object like "address.person.firstname" but it always eager load the person ?
I also tried to static weave it using maven my pom.xml contains :
<plugins>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>process-classes</phase>
<configuration>
<tasks>
<java classname="org.eclipse.persistence.tools.weaving.jpa.StaticWeave"
classpathref="maven.runtime.classpath" fork="true">
<arg line="-loglevel FINE -persistenceinfo src target/classes target/classes"/>
</java>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
also added <property name="eclipselink.weaving" value="static"/>
in persistence.xml
I also tried dynamic weaving but it gives exception :
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:397)
Caused by: java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceUnitInfo
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at org.eclipse.persistence.internal.jpa.deployment.JavaSECMPInitializerAgent.initializeFromAgent(JavaSECMPInitializerAgent.java:44)
at org.eclipse.persistence.internal.jpa.deployment.JavaSECMPInitializerAgent.premain(JavaSECMPInitializerAgent.java:39)
... 6 more
Caused by: java.lang.ClassNotFoundException: javax.persistence.spi.PersistenceUnitInfo
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 10 more
FATAL ERROR in native method: processing of -javaagent failed
Exception in thread "main"
My static woven class files show following methods but still does not work :
Please check my log after weaving when weaving=static and logging = FINEST
[EL Finest]: jpa: 2013-09-26 18:07:40.453--ServerSession(8941730)--Thread(Thread[main,5,main])--Begin predeploying Persistence Unit TestDB; session file:/C:/Users/achyut_anr/achyut_anr/CheckWeaving/bin/_TestDB; state Initial; factoryCount 0
[EL Finest]: properties: 2013-09-26 18:07:40.475--ServerSession(8941730)--Thread(Thread[main,5,main])--property=eclipselink.orm.throw.exceptions; default value=true
[EL Finest]: properties: 2013-09-26 18:07:40.475--ServerSession(8941730)--Thread(Thread[main,5,main])--property=eclipselink.weaving.changetracking; default value=true
[EL Finest]: properties: 2013-09-26 18:07:40.476--ServerSession(8941730)--Thread(Thread[main,5,main])--property=eclipselink.weaving.lazy; default value=true
[EL Finest]: properties: 2013-09-26 18:07:40.476--ServerSession(8941730)--Thread(Thread[main,5,main])--property=eclipselink.weaving.eager; default value=false
[EL Finest]: properties: 2013-09-26 18:07:40.476--ServerSession(8941730)--Thread(Thread[main,5,main])--property=eclipselink.weaving.fetchgroups; default value=true
[EL Finest]: properties: 2013-09-26 18:07:40.476--ServerSession(8941730)--Thread(Thread[main,5,main])--property=eclipselink.weaving.internal; default value=true
[EL Finest]: properties: 2013-09-26 18:07:40.476--ServerSession(8941730)--Thread(Thread[main,5,main])--property=eclipselink.weaving.rest; default value=true
[EL Finest]: properties: 2013-09-26 18:07:40.477--ServerSession(8941730)--Thread(Thread[main,5,main])--property=eclipselink.multitenant.tenants-share-emf; default value=true
[EL Finest]: properties: 2013-09-26 18:07:40.478--ServerSession(8941730)--Thread(Thread[main,5,main])--property=eclipselink.multitenant.tenants-share-cache; default value=false
[EL Finer]: metadata: 2013-09-26 18:07:40.496--ServerSession(8941730)--Thread(Thread[main,5,main])--Searching for default mapping file in file:/C:/Users/achyut_anr/achyut_anr/CheckWeaving/bin/ (There is no English translation for this message.)
[EL Finer]: metadata: 2013-09-26 18:07:40.5--ServerSession(8941730)--Thread(Thread[main,5,main])--Searching for default mapping file in file:/C:/Users/achyut_anr/achyut_anr/CheckWeaving/bin/ (There is no English translation for this message.)
[EL Config]: metadata: 2013-09-26 18:07:40.681--ServerSession(8941730)--Thread(Thread[main,5,main])--The access type for the persistent class [class com.altametrics.persistence.services.Address] is set to [FIELD].
[EL Config]: metadata: 2013-09-26 18:07:40.723--ServerSession(8941730)--Thread(Thread[main,5,main])--The target entity (reference) class for the many to one mapping element [field person] is being defaulted to: class com.altametrics.persistence.services.Person.
[EL Config]: metadata: 2013-09-26 18:07:40.725--ServerSession(8941730)--Thread(Thread[main,5,main])--The access type for the persistent class [class com.altametrics.persistence.services.Person] is set to [FIELD].
[EL Config]: metadata: 2013-09-26 18:07:40.733--ServerSession(8941730)--Thread(Thread[main,5,main])--The alias name for the entity class [class com.altametrics.persistence.services.Address] is being defaulted to: Address.
[EL Config]: metadata: 2013-09-26 18:07:40.735--ServerSession(8941730)--Thread(Thread[main,5,main])--The table name for entity [class com.altametrics.persistence.services.Address] is being defaulted to: ADDRESS.
[EL Config]: metadata: 2013-09-26 18:07:40.759--ServerSession(8941730)--Thread(Thread[main,5,main])--The column name for element [id] is being defaulted to: ID.
[EL Config]: metadata: 2013-09-26 18:07:40.761--ServerSession(8941730)--Thread(Thread[main,5,main])--The column name for element [addressLine2] is being defaulted to: ADDRESSLINE2.
[EL Config]: metadata: 2013-09-26 18:07:40.762--ServerSession(8941730)--Thread(Thread[main,5,main])--The column name for element [addressLine1] is being defaulted to: ADDRESSLINE1.
[EL Config]: metadata: 2013-09-26 18:07:40.762--ServerSession(8941730)--Thread(Thread[main,5,main])--The alias name for the entity class [class com.altametrics.persistence.services.Person] is being defaulted to: Person.
[EL Config]: metadata: 2013-09-26 18:07:40.762--ServerSession(8941730)--Thread(Thread[main,5,main])--The table name for entity [class com.altametrics.persistence.services.Person] is being defaulted to: PERSON.
[EL Config]: metadata: 2013-09-26 18:07:40.763--ServerSession(8941730)--Thread(Thread[main,5,main])--The column name for element [id] is being defaulted to: ID.
[EL Config]: metadata: 2013-09-26 18:07:40.763--ServerSession(8941730)--Thread(Thread[main,5,main])--The column name for element [lastName] is being defaulted to: LASTNAME.
[EL Config]: metadata: 2013-09-26 18:07:40.763--ServerSession(8941730)--Thread(Thread[main,5,main])--The column name for element [email] is being defaulted to: EMAIL.
[EL Config]: metadata: 2013-09-26 18:07:40.764--ServerSession(8941730)--Thread(Thread[main,5,main])--The column name for element [firstName] is being defaulted to: FIRSTNAME.
[EL Config]: metadata: 2013-09-26 18:07:40.785--ServerSession(8941730)--Thread(Thread[main,5,main])--The primary key column name for the mapping element [field person] is being defaulted to: ID.
[EL Finer]: weaver: 2013-09-26 18:07:40.805--ServerSession(8941730)--Thread(Thread[main,5,main])--Class [com.altametrics.persistence.services.Address] registered to be processed by weaver.
[EL Finer]: weaver: 2013-09-26 18:07:40.807--ServerSession(8941730)--Thread(Thread[main,5,main])--Class [com.altametrics.persistence.services.Person] registered to be processed by weaver.
[EL Finest]: jpa: 2013-09-26 18:07:40.809--ServerSession(8941730)--Thread(Thread[main,5,main])--End predeploying Persistence Unit TestDB; session file:/C:/Users/achyut_anr/achyut_anr/CheckWeaving/bin/_TestDB; state Predeployed; factoryCount 0
[EL Finer]: weaver: 2013-09-26 18:07:40.81--Thread(Thread[main,5,main])--JavaSECMPInitializer - transformer is null.
[EL Finest]: jpa: 2013-09-26 18:07:40.81--ServerSession(8941730)--Thread(Thread[main,5,main])--Begin predeploying Persistence Unit TestDB; session file:/C:/Users/achyut_anr/achyut_anr/CheckWeaving/bin/_TestDB; state Predeployed; factoryCount 0
[EL Finest]: jpa: 2013-09-26 18:07:40.81--ServerSession(8941730)--Thread(Thread[main,5,main])--End predeploying Persistence Unit TestDB; session file:/C:/Users/achyut_anr/achyut_anr/CheckWeaving/bin/_TestDB; state Predeployed; factoryCount 1
[EL Finest]: jpa: 2013-09-26 18:07:40.815--ServerSession(8941730)--Thread(Thread[main,5,main])--Begin deploying Persistence Unit TestDB; session file:/C:/Users/achyut_anr/achyut_anr/CheckWeaving/bin/_TestDB; state Predeployed; factoryCount 1
[EL Finer]: 2013-09-26 18:07:40.829--ServerSession(8941730)--Thread(Thread[main,5,main])--Could not initialize Validation Factory. Encountered following exception: java.lang.NoClassDefFoundError: javax/validation/Validation
[EL Finest]: properties: 2013-09-26 18:07:40.831--ServerSession(8941730)--Thread(Thread[main,5,main])--property=eclipselink.logging.level; value=FINEST; translated value=FINEST
[EL Finest]: properties: 2013-09-26 18:07:40.832--ServerSession(8941730)--Thread(Thread[main,5,main])--property=eclipselink.logging.level; value=FINEST; translated value=FINEST
[EL Finest]: properties: 2013-09-26 18:07:40.837--ServerSession(8941730)--Thread(Thread[main,5,main])--property=javax.persistence.jdbc.user; value=root
[EL Finest]: properties: 2013-09-26 18:07:40.837--ServerSession(8941730)--Thread(Thread[main,5,main])--property=javax.persistence.jdbc.password; value=xxxxxx
[EL Finest]: properties: 2013-09-26 18:07:41.502--ServerSession(8941730)--Thread(Thread[main,5,main])--property=javax.persistence.jdbc.driver; value=com.mysql.jdbc.Driver
[EL Finest]: properties: 2013-09-26 18:07:41.502--ServerSession(8941730)--Thread(Thread[main,5,main])--property=javax.persistence.jdbc.url; value=jdbc:mysql://localhost:3306/sample
[EL Info]: 2013-09-26 18:07:41.506--ServerSession(8941730)--Thread(Thread[main,5,main])--EclipseLink, version: Eclipse Persistence Services - 2.5.0.v20130507-3faac2b
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.757--Thread(Thread[main,5,main])--(?i)oracle.*12 (There is no English translation for this message.)
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.757--Thread(Thread[main,5,main])--(?i)oracle.*11 (There is no English translation for this message.)
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.757--Thread(Thread[main,5,main])--(?i)oracle.*10 (There is no English translation for this message.)
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.758--Thread(Thread[main,5,main])--(?i)oracle.*9 (There is no English translation for this message.)
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.758--Thread(Thread[main,5,main])--(?i)oracle.* (There is no English translation for this message.)
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.758--Thread(Thread[main,5,main])--SQL\ Anywhere.* (There is no English translation for this message.)
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.758--Thread(Thread[main,5,main])--(?i)(sybase.*)|(adaptive\ server\ enterprise.*)|(SQL\ Server.*) (There is no English translation for this message.)
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.759--Thread(Thread[main,5,main])--(?i)microsoft.* (There is no English translation for this message.)
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.759--Thread(Thread[main,5,main])--(?i).*derby.* (There is no English translation for this message.)
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.759--Thread(Thread[main,5,main])--(?i).*db2.* (There is no English translation for this message.)
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.759--Thread(Thread[main,5,main])--(?i)pointbase.* (There is no English translation for this message.)
[EL Finest]: dbPlatformHelper_regExprDbPlatform: 2013-09-26 18:07:41.759--Thread(Thread[main,5,main])--(?i)mysql.* (There is no English translation for this message.)
[EL Fine]: connection: 2013-09-26 18:07:41.76--Thread(Thread[main,5,main])--Detected database platform: org.eclipse.persistence.platform.database.MySQLPlatform
[EL Config]: connection: 2013-09-26 18:07:41.771--ServerSession(8941730)--Connection(7521179)--Thread(Thread[main,5,main])--connecting(DatabaseLogin(
platform=>MySQLPlatform
user name=> "root"
datasource URL=> "jdbc:mysql://localhost:3306/sample"
))
[EL Config]: connection: 2013-09-26 18:07:41.783--ServerSession(8941730)--Connection(27722152)--Thread(Thread[main,5,main])--Connected: jdbc:mysql://localhost:3306/sample
User: root@localhost
Database: MySQL Version: 5.1.39-community
Driver: MySQL-AB JDBC Driver Version: mysql-connector-java-5.1.18 ( Revision: [email protected] )
[EL Finest]: connection: 2013-09-26 18:07:41.783--ServerSession(8941730)--Connection(27722152)--Thread(Thread[main,5,main])--Connection acquired from connection pool [default].
[EL Finest]: connection: 2013-09-26 18:07:41.783--ServerSession(8941730)--Connection(27722152)--Thread(Thread[main,5,main])--Connection released to connection pool [default].
[EL Info]: connection: 2013-09-26 18:07:41.828--ServerSession(8941730)--Thread(Thread[main,5,main])--file:/C:/Users/achyut_anr/achyut_anr/CheckWeaving/bin/_TestDB login successful
[EL Finer]: metamodel: 2013-09-26 18:07:41.841--ServerSession(8941730)--Thread(Thread[main,5,main])--Canonical Metamodel class [com.altametrics.persistence.services.Person_] not found during initialization.
[EL Finer]: metamodel: 2013-09-26 18:07:41.842--ServerSession(8941730)--Thread(Thread[main,5,main])--Canonical Metamodel class [com.altametrics.persistence.services.Address_] not found during initialization.
[EL Finest]: jpa: 2013-09-26 18:07:41.842--ServerSession(8941730)--Thread(Thread[main,5,main])--End deploying Persistence Unit TestDB; session file:/C:/Users/achyut_anr/achyut_anr/CheckWeaving/bin/_TestDB; state Deployed; factoryCount 1
[EL Finer]: connection: 2013-09-26 18:07:41.863--ServerSession(8941730)--Thread(Thread[main,5,main])--client acquired: 3812334
[EL Finer]: transaction: 2013-09-26 18:07:41.872--ClientSession(3812334)--Thread(Thread[main,5,main])--acquire unit of work: 25692210
[EL Finest]: query: 2013-09-26 18:07:41.887--UnitOfWork(25692210)--Thread(Thread[main,5,main])--Execute query ReadObjectQuery(name="readAddress" referenceClass=Address sql="SELECT ID, ADDRESSLINE1, ADDRESSLINE2, personid FROM ADDRESS WHERE (ID = ?)")
[EL Finest]: connection: 2013-09-26 18:07:41.889--ServerSession(8941730)--Connection(27722152)--Thread(Thread[main,5,main])--Connection acquired from connection pool [default].
[EL Fine]: sql: 2013-09-26 18:07:41.889--ServerSession(8941730)--Connection(27722152)--Thread(Thread[main,5,main])--SELECT ID, ADDRESSLINE1, ADDRESSLINE2, personid FROM ADDRESS WHERE (ID = ?)
bind => [1]
[EL Finest]: connection: 2013-09-26 18:07:41.913--ServerSession(8941730)--Connection(27722152)--Thread(Thread[main,5,main])--Connection released to connection pool [default].
[EL Finest]: query: 2013-09-26 18:07:41.917--ServerSession(8941730)--Thread(Thread[main,5,main])--Execute query ReadObjectQuery(name="person" referenceClass=Person )
[EL Finest]: connection: 2013-09-26 18:07:41.917--ServerSession(8941730)--Connection(27722152)--Thread(Thread[main,5,main])--Connection acquired from connection pool [default].
[EL Fine]: sql: 2013-09-26 18:07:41.918--ServerSession(8941730)--Connection(27722152)--Thread(Thread[main,5,main])--SELECT ID, EMAIL, FIRSTNAME, LASTNAME FROM PERSON WHERE (ID = ?)
bind => [1]
[EL Finest]: connection: 2013-09-26 18:07:41.919--ServerSession(8941730)--Connection(27722152)--Thread(Thread[main,5,main])--Connection released to connection pool [default].
[EL Finest]: transaction: 2013-09-26 18:07:41.922--UnitOfWork(25692210)--Thread(Thread[main,5,main])--Register the existing object personId=1
My persistence unit looks like :
<persistence-unit name="TestDB">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.altametrics.persistence.services.Person</class>
<class>com.altametrics.persistence.services.Address</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/sample"/>
<property name="javax.persistence.jdbc.password" value="admin"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="eclipselink.weaving" value="static"/>
<!-- <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> -->
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
Hibernate now can "lazy-load" the children, which means that it does not actually load all the children when loading the parent. Instead, it loads them when requested to do so. You can either request this explicitly or, and this is far more common, hibernate will load them automatically when you try to access a child.
Lazy loading in Hibernate means fetching and loading the data, only when it is needed, from a persistent storage like a database. Lazy loading improves the performance of data fetching and significantly reduces the memory footprint.
lazy it is interpreted as a hint to the jpa provider that the loading of that field may be delayed until it is accessed for the first time: the property value in case of a @basic annotation, the reference in case of a @manytoone or a @onetoone annotation, or.
weaving is required for some lazy relationships and enabling other performance enhancements in EclipseLink such as fetch groups and change tracking, as described at http://www.eclipse.org/eclipselink/documentation/2.4/concepts/app_dev007.htm
Weaving is generally automatic occurs within EE 7 containers, but will require work outside of the container or in non-EE7 containers. So to get lazy to work on 1:1 and M:1, you will need to enable weaving either dynamically through use of an agent, or statically weaving class files and then using those.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With