Я получаю следующее исключение и все это в 1000 раз делали раньше, но теперь я получаю сообщение об ошибке:ValidationException Исключение Описание: используется не объект в качестве целевого объекта в отношениях атрибут
ValidationException Исключение Описание: [класс com.smartphonedev.rsvplaw.entities.Staff] использует не-сущность [класс com.smartphonedev.rsvplaw.entities.Address] как целевой объект в атрибуте отношения [адреса полей].
вот сущности, о которых идет речь , Может ли кто-нибудь помочь мне определить, что не так с моими отношениями?
<code>
@Entity
@Table(name="address")
public class Address implements Serializable,
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name="addressType")
@Enumerated(EnumType.ORDINAL)
private AddressType addressType;
@Column(name="streetLineOne")
private String streetLineOne;
@Column(name="streetLineTwo")
private String streetLineTwo;
@Column(name="city")
private String city;
@Column(name="adState")
private String state;
@Column(name="postCode")
private String postCode;
@OneToMany(fetch=FetchType.LAZY, targetEntity=PhoneNumber.class, cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH},orphanRemoval=true)
@JoinColumn(name="phoneNumbers")
private Collection<PhoneNumber> phoneNumbers;
…..
}
@Entity
@Table(name="staff")
public class Staff implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
//private Profile profile;
@OneToOne(fetch=FetchType.LAZY,cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
@JoinColumn(name="permission")
private Permission permission;
@OneToOne(fetch=FetchType.LAZY,cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH})
@JoinColumn(name="login")
private Login login;
@Column(name="firstName")
private String firstName;
@Column(name="surnameName")
private String surnameName;
@Column(name="emailAddress")
private String emailAddress;
@OneToMany(fetch=FetchType.LAZY, targetEntity=PhoneNumber.class, cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH},orphanRemoval=true)
@JoinColumn(name="phoneNumbers")
private Collection<PhoneNumber> phoneNumbers;
@OneToMany(fetch=FetchType.LAZY, targetEntity=Address.class, cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH},orphanRemoval=true)
@JoinColumn(name="addresses")
private Collection<Address> addresses;
}
</code
Добавление класса PHONENUMBER @Entity @Table(name="phone") public class PhoneNumber implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;
@Column(name="numberType")
@Enumerated(EnumType.ORDINAL)
private PhoneNumberType numberType;
@Column(name="phoneNumber")
private String phoneNumber;
}
</code>
Adding persistance.xml
<code>
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="RSVPLawServerPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/RSVPLaw</jta-data-source>
<class>com.smartphonedev.rsvplaw.entities.PhoneNumber</class>
<class>com.smartphonedev.rsvplaw.entities.Address</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<shared-cache-mode>NONE</shared-cache-mode>
<validation-mode>CALLBACK</validation-mode>
<properties>
<property name="eclipselink.target-server" value="SunAS9"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="database"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
<code>
'@ OneToMany' должен быть' mappedBy', а '@ ManyToOne' должен сопровождаться' @ JoinColumn' –
@guido OneToMany имеет «mappedBy» ТОЛЬКО, если он двунаправлен ... так как вы знаете, что он находится в этот случай, когда он не показывает класс PhoneNumber? –
http://stackoverflow.com/questions/11938253/jpa-joincolumn-vs-mappedby –