Tengo una aplicación Java EE que se ejecuta en tomcat con un par de clases de entidad y usa eclipselink 2.1 y jpa 2.0. Las entidades son EmailNotification y EmailNotificationQueueRow.La entidad no está tejida. Eclipselink 2.1 + Tejido dinámico
@Entity
public class EmailNotification implements Serializable, IEntity<Integer> {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "emailGen")
@SequenceGenerator(name = "emailGen", sequenceName = "SQ_EMAIL_NOTIFICATIONS", allocationSize=1)
@Basic(optional = false)
@Column(name = "EMAIL_ID")
private Integer emailId;
@Basic(optional = false)
@Column(name = "EMAIL_SUBJECT")
private String emailSubject;
@Basic(optional = false)
@Column(name = "EMAIL_BODY")
private String emailBody;
@Basic(optional = false)
@Column(name = "SENT_FROM_EMAIL_ADDRESS")
private String sentFromEmailAddress;
@Column(name = "SEND_TO_ORG_ID")
private Integer sendToOrgId;
@Column(name = "SEND_TO_EMAIL_ADDRESS")
private String sendToEmailAddress;
@Column(name = "CARBON_COPY_ORG_ID")
private Integer carbonCopyOrgId;
@Column(name = "CARBON_COPY_EMAIL_ADDRESS")
private String carbonCopyEmailAddress;
@Column(name = "BCC_ORG_ID")
private Integer bccOrgId;
@Column(name = "BCC_EMAIL_ADDRESS")
private String bccEmailAddress;
@Column(name = "PROJECT_ID")
private Integer projectId;
//getters and setters
}
@Entity
public class EmailNotificationQueueRow implements Serializable, IEntity<Integer> {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "EMAIL_QUEUE_ID")
private Integer emailQueueId;
@Basic(optional = false)
@Column(name = "EMAIL_ID")
private int emailId;
@Basic(optional = false)
@Column(name = "REQUEST_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date requestDate;
@Basic(optional = false)
@Column(name = "MESSAGE_SENT_FLAG")
private String messageSentFlag;
@Column(name = "MESSAGE_SENT_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date messageSentDate;
@JoinColumn(name = "EMAIL_ID", referencedColumnName = "EMAIL_ID", updatable = false, insertable = false)
@OneToOne(fetch = FetchType.LAZY)
private EmailNotification emailNotification;
//getters and setters
}
Cada vez que puse la relación de la variable EmailNotification a FetchType.LAZY (como arriba) la clase no está tejida. Está registrado para tejer, pero nunca lo está.
El registro está debajo. La entidad EmailNotification está tejida, pero no la entidad EmailNotificationQueueRow. ¿Algunas ideas?
[EL Config]: 2011-02-15 14:21:13.642--ServerSession(1191324)--Thread(Thread[main,5,main])
--The access type for the persistent class [class persistence.model.EmailNotification] is set to [FIELD].
[EL Config]: 2011-02-15 14:21:13.674--ServerSession(1191324)--Thread(Thread[main,5,main])
--The access type for the persistent class [class persistence.model.EmailNotificationQueueRow] is set to [FIELD].
[EL Config]: 2011-02-15 14:21:13.674--ServerSession(1191324)--Thread(Thread[main,5,main])
--The target entity (reference) class for the one to one mapping element [field emailNotification] is being defaulted to: class persistence.model.EmailNotification.
[EL Config]: 2011-02-15 14:21:13.689--ServerSession(1191324)--Thread(Thread[main,5,main])
--The alias name for the entity class [class persistence.model.EmailNotification] is being defaulted to: EmailNotification.
[EL Config]: 2011-02-15 14:21:13.72--ServerSession(1191324)--Thread(Thread[main,5,main])
--The alias name for the entity class [class persistence.model.EmailNotificationQueueRow] is being defaulted to: EmailNotificationQueueRow.
[EL Finer]: 2011-02-15 14:21:13.736--ServerSession(1191324)--Thread(Thread[main,5,main])
--Class [persistence.model.EmailNotification] registered to be processed by weaver.
[EL Finer]: 2011-02-15 14:21:13.799--ServerSession(1191324)--Thread(Thread[main,5,main])
--Class [persistence.model.EmailNotificationQueueRow] registered to be processed by weaver.
[EL Finest]: 2011-02-15 14:21:13.799--ServerSession(1191324)--Thread(Thread[main,5,main])
--End predeploying Persistence Unit iDMS_Persistence_Unit; session file:/C:/idms/build/web/WEB-INF/classes/_iDMS_Persistence_Unit; state Predeployed; factoryCount 1
[EL Finest]: 2011-02-15 14:21:13.908--ServerSession(1191324)--Thread(Thread[main,5,main])
--Begin weaver class transformer processing class [persistence/model/EmailNotification].
[EL Finest]: 2011-02-15 14:21:13.924--ServerSession(1191324)--Thread(Thread[main,5,main])
--Weaved persistence (PersistenceEntity) [persistence/model/EmailNotification].
[EL Finest]: 2011-02-15 14:21:13.924--ServerSession(1191324)--Thread(Thread[main,5,main])
--Weaved change tracking (ChangeTracker) [persistence/model/EmailNotification].
[EL Finest]: 2011-02-15 14:21:13.986--ServerSession(1191324)--Thread(Thread[main,5,main])
--Weaved fetch groups (FetchGroupTracker) [persistence/model/EmailNotification].
[EL Finest]: 2011-02-15 14:21:13.986--ServerSession(1191324)--Thread(Thread[main,5,main])
--End weaver class transformer processing class [persistence/model/EmailNotification].
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="iDMS_Persistence_Unit" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/dms</jta-data-source>
<class>persistence.model.EmailNotification</class>
<class>persistence.model.EmailNotificationQueueRow</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="eclipselink.weaving" value="true"/>
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>
actualización
estoy usando la cadena EclipseLink javaagent para iniciar Tomcat. También hay otras asignaciones de OneToOne cargadas de forma holgazana en mi proyecto que se tejen. Es solo esta una clase (EmailNotificationQueueRow) que no se teje.
¿Se puede intentar si se establece 'nullable' en JoinColumn o' optional' en OneToOne para cambiar falsamente algo? Además, ¿qué versión de EclipseLink estás usando? –