я получаю следующее предупреждение на терминале GlassFish при развертывании приложения, которое имеет ленивое выборку данных в организациях, еслиКак включить плетение в EclipseLink?
WARNING: Reverting the lazy setting on the
OneToOne
orManyToOne
attribute[zoneTable]
for the entity class[class entity.ZoneCharge]
since weaving was not enabled or did not occur.
по какому-либо лицо, которые перечислены в проекте.
Файл persistence.xml
выглядит примерно следующим образом.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence"
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="Project-ejbPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/pool</jta-data-source>
<class>entity.ZoneTable</class>
<!--Other classes-->
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.weaving" value="static"/>
<property name="eclipselink.target-server" value="SunAS9"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.logging.level.sql" value="FINEST"/>
<property name="eclipselink.logging.level" value="FINEST" />
<property name="eclipselink.logging.level" value="WARNING"/>
<property name="eclipselink.logging.level.cache" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>
ZoneTable
класса выглядит,
@Entity
@Table(name = "zone_table", catalog = "projectdb", schema = "")
public class ZoneTable implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "zone_id")
private Long zoneId;
@Column(name = "zone_name")
private String zoneName;
@OneToMany(mappedBy = "zoneTable", fetch = FetchType.LAZY)
private Set<ZoneCharge> zoneChargeSet;
//Setters and getters.
}
Здесь ленивая выборка работает даже с удаленной EJBs, но я думаю, это считается нетерпеливым из-за вышеуказанное предупреждение.
Как включить плетение (или каким-либо другим способом), чтобы избежать этого предупреждения?
Когда я ввожу эту команду как упоминалось here,
java org.eclipse.persistence.tools.weaving.jpa.StaticWeave
в командной строке, я получаю следующее сообщение об ошибке.
Error: could not find or load main classorg.eclipse.persistence.tools.weaving.jpa.StaticWeave
Каковы способы преодоления этого предупреждения?
Если это свойство удалено, то оно выдает это исключение - 'javax.servlet.ServletException: Исключение Описание: Была предпринята попытка обхода отношения с использованием косвенности с нулевым сеансом. Это часто происходит, когда объект с неинтересными отношениями LAZY сериализуется и эти ленивые отношения пересекаются после сериализации. Чтобы избежать этой проблемы, создайте связь LAZY перед сериализацией. «Итак, это бездействует без этого свойства. – Tiny
Это означает, что сплетение было успешно использовано, но вы пересекаете непринужденные ленивые отношения после сериализации сущности, которая не допускается. После сериализации контекст недоступен, поэтому ленивые отношения не могут быть получены. Вы должны получить доступ к этой привязке до сериализации (например, с помощью добавления соединения по отношению) или сделать отношение нетерпеливым так, чтобы оно уже было извлечено. – Chris
Присоединение fetch работало, хотя оно выглядит немного уродливым с API критериев. Являются ли отношения в этом случае, действительно не считаются нетерпеливыми? – Tiny