2013-09-12 2 views
1

я получаю следующее предупреждение на терминале GlassFish при развертывании приложения, которое имеет ленивое выборку данных в организациях, еслиКак включить плетение в EclipseLink?

WARNING: Reverting the lazy setting on the OneToOne or ManyToOne 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

Каковы способы преодоления этого предупреждения?

ответ

1

Убедитесь, что у вас есть EclipseLink.jar с org.eclipse.persistence.tools.weaving.jpa.StaticWeave на пути к классу при попытке запустить этот класс для статического ткачества.

Но если вы работаете в GlassFish 4, вам не нужно использовать статическое ткачество. Удалите объект <property name="eclipselink.weaving" value="static"/> и попробуйте снова установить его. Это свойство указывает, что ваши классы уже были статически увеличены, чтобы динамическое ткачество не должно происходить. Поскольку они не были улучшены, ленивые 1: 1 и M: 1 будут по умолчанию стремиться.

+0

Если это свойство удалено, то оно выдает это исключение - 'javax.servlet.ServletException: Исключение Описание: Была предпринята попытка обхода отношения с использованием косвенности с нулевым сеансом. Это часто происходит, когда объект с неинтересными отношениями LAZY сериализуется и эти ленивые отношения пересекаются после сериализации. Чтобы избежать этой проблемы, создайте связь LAZY перед сериализацией. «Итак, это бездействует без этого свойства. – Tiny

+0

Это означает, что сплетение было успешно использовано, но вы пересекаете непринужденные ленивые отношения после сериализации сущности, которая не допускается. После сериализации контекст недоступен, поэтому ленивые отношения не могут быть получены. Вы должны получить доступ к этой привязке до сериализации (например, с помощью добавления соединения по отношению) или сделать отношение нетерпеливым так, чтобы оно уже было извлечено. – Chris

+0

Присоединение fetch работало, хотя оно выглядит немного уродливым с API критериев. Являются ли отношения в этом случае, действительно не считаются нетерпеливыми? – Tiny

Смежные вопросы