アドレスは次のような人と多対 1 の関係があります。
人 :
@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() {
}
住所 :
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="personId")
private Person person;
「address.person.firstname」のようなアドレスオブジェクトから人の名にアクセスしたいのですが、常に熱心に人をロードしますか?
また、pom.xmlに含まれるmavenを使用して静的に織り込もうとしました:
<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>
<property name="eclipselink.weaving" value="static"/>
persistence.xml にも追加
動的ウィービングも試しましたが、例外が発生します:
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"
私の静的織りクラスファイルには次のメソッドが表示されますが、まだ機能しません:
weaving=static および 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: tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq )
[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
私の永続化ユニットは次のようになります:
<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>