Я работаю над приложением, использующим JPA + Eclipselink, но получаю следующую ошибку:
[класс Domein.Activiteit] использует не-сущность [класс Domein.Lid] в качестве целевого объекта в атрибуте отношения [метод getDeelnemers]
Вот мой класс Activiteit (сокращенно):
@Entity
@Access(AccessType.PROPERTY)
public class Activiteit{
private final SimpleLongProperty activiteitId = new SimpleLongProperty();
private SimpleStringProperty naam = new SimpleStringProperty();
private SimpleIntegerProperty maxAantalDeelnemers = new SimpleIntegerProperty();
private SimpleObjectProperty<Date> startDatum = new SimpleObjectProperty<>();
private SimpleObjectProperty<ActiviteitType> type = new SimpleObjectProperty<>();
private SimpleObjectProperty<Date> eindDatum = new SimpleObjectProperty<>();;
private SimpleObjectProperty<Date> uitersteInschrijving = new SimpleObjectProperty<>();;
private SimpleObjectProperty<List<Lid>> deelnemers = new SimpleObjectProperty<>(new ArrayList<>());
public Activiteit(){}
public Activiteit(String naam, ActiviteitType type, int maxAantalDeelnemers, Date startDatum,
Date eindDatum, Date uitersteInschrijving) {
valideerData(startDatum, eindDatum, uitersteInschrijving);
setNaam(naam);
setActiviteitType(type);
setMaxAantalDeelnemers(maxAantalDeelnemers);
setStartDatum(startDatum);
setEindDatum(eindDatum);
setUitersteInschrijving(uitersteInschrijving);
}
public Activiteit(String naam, ActiviteitType type, int maxAantalDeelnemers, Date startDatum,
Date eindDatum, Date uitersteInschrijving, List<Lid> deelnemers) {
valideerData(startDatum, eindDatum, uitersteInschrijving);
setNaam(naam);
setActiviteitType(type);
setMaxAantalDeelnemers(maxAantalDeelnemers);
setStartDatum(startDatum);
setEindDatum(eindDatum);
setUitersteInschrijving(uitersteInschrijving);
getDeelnemers().addAll(deelnemers);
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getActiviteitId(){
return this.activiteitId.get();
}
public LongProperty getActiviteitIdProperty(){
return this.activiteitId;
}
// --------- THE OFFENDER ----------------------------------------------
// ---------------------------------------------------------------------
@ManyToMany
@CascadeOnDelete
public List<Lid> getDeelnemers(){
return this.deelnemers.get();
}
public ObjectProperty<List<Lid>> getDeelnemersProperty(){
return this.deelnemers;
}
public void setDeelnemers(List<Lid> deelnemers){
// set List<Lid>
}
public void voegDeelnemerToe(Lid deelnemer) {
// add Lid
}
public void verwijderDeelnemer(Lid deelnemer) {
// remove Lid
}
@Column
public String getNaam(){
return this.naam.get();
}
public StringProperty getNaamProperty(){
return this.naam;
}
public void setNaam(String naam){
if(naam == null || naam.isBlank())
throw new TekstNullLeegOfWhitespaceException("De naam moet ingevuld zijn.");
this.naam.set(naam);
}
@Column
@Enumerated
public ActiviteitType getActiviteitType(){
return this.type.get();
}
public ObjectProperty<ActiviteitType> getActiviteitTypeProperty(){
return this.type;
}
public void setActiviteitType(ActiviteitType type){
this.type.set(type);
}
@Column
public int getMaxAantalDeelnemers(){
return this.maxAantalDeelnemers.get();
}
public IntegerProperty getMaxAantalDeelnemersProperty(){
return this.maxAantalDeelnemers;
}
public void setMaxAantalDeelnemers(int maxAantalDeelnemers){
if(maxAantalDeelnemers <= 0)
throw new MaxAantalDeelnemersNulofNegatiefException("Maximaal aantal deelnemers moet minstens 1 zijn!");
this.maxAantalDeelnemers.set(maxAantalDeelnemers);
}
@Column
@Temporal(TemporalType.DATE)
public Date getStartDatum(){
return this.startDatum.get();
}
public ObjectProperty<Date> getStartDatumProperty(){
return this.startDatum;
}
public void setStartDatum(Date startDatum) throws DatumReedsVoorbijException{
valideerData(startDatum, this.getEindDatum(), this.getUitersteInschrijving());
this.startDatum.set(startDatum);
}
@Column
@Temporal(TemporalType.DATE)
public Date getEindDatum(){
return this.eindDatum.get();
}
public ObjectProperty<Date> getEindDatumProperty(){
return this.eindDatum;
}
public void setEindDatum(Date eindDatum) throws DatumReedsVoorbijException{
valideerData(this.getStartDatum(), eindDatum, this.getUitersteInschrijving());
this.eindDatum.set(eindDatum);
}
@Column
@Temporal(TemporalType.DATE)
public Date getUitersteInschrijving(){
return this.uitersteInschrijving.get();
}
public ObjectProperty<Date> getUitersteInschrijvingProperty(){
return this.uitersteInschrijving;
}
public void setUitersteInschrijving(Date uitersteInschrijving) throws DatumReedsVoorbijException{
valideerData(this.getStartDatum(), this.getEindDatum(), uitersteInschrijving);
this.uitersteInschrijving.set(uitersteInschrijving);
}
public boolean isVolzet(){
return getDeelnemers().size() == getMaxAantalDeelnemers();
}
private void valideerData(Date startDatum, Date eindDatum,
Date uitersteInschrijving) throws DatumReedsVoorbijException {
// validation
}
}
Вот класс Lid:
@Entity
@Access(AccessType.PROPERTY)
public class Lid {
private final SimpleLongProperty lidId = new SimpleLongProperty();
private SimpleLongProperty huisnummer = new SimpleLongProperty();
private SimpleStringProperty voornaam = new SimpleStringProperty();
private SimpleStringProperty familienaam = new SimpleStringProperty();
private SimpleStringProperty gebruikersnaam = new SimpleStringProperty();
private SimpleStringProperty wachtwoord = new SimpleStringProperty();
private SimpleStringProperty straatnaam = new SimpleStringProperty();
private SimpleStringProperty vastTelefoonNummer = new SimpleStringProperty();
private SimpleStringProperty gsmNummer = new SimpleStringProperty();
private SimpleStringProperty email = new SimpleStringProperty();
private SimpleStringProperty emailOuders = new SimpleStringProperty();
private SimpleObjectProperty<LidType> type = new SimpleObjectProperty<>();
private SimpleObjectProperty<Date> geboortedatum = new SimpleObjectProperty<>();
private SimpleObjectProperty<Date> inschrijvingsdatum = new SimpleObjectProperty<>();
private SimpleObjectProperty<Formule> formule = new SimpleObjectProperty<>();
private SimpleObjectProperty<Graad> graad = new SimpleObjectProperty<>();
private SimpleObjectProperty<Geslacht> geslacht = new SimpleObjectProperty<>();
private SimpleIntegerProperty punten = new SimpleIntegerProperty(0);
private SimpleBooleanProperty infoClub = new SimpleBooleanProperty();
private SimpleBooleanProperty infoFederaal = new SimpleBooleanProperty();
private SimpleLongProperty postcode = new SimpleLongProperty();
private SimpleStringProperty stad = new SimpleStringProperty();
private SimpleStringProperty nationaliteit = new SimpleStringProperty();
private SimpleStringProperty geboortePlaats = new SimpleStringProperty();
private DojoClub dojo;
public Lid(){}
public Lid(LidDto lidDto) throws NoSuchAlgorithmException, InvalidKeySpecException {
setHuisnummer(lidDto.getHuisnummer());
setVoornaam(lidDto.getVoornaam());
setFamilienaam(lidDto.getFamilienaam());
setGebruikersnaam(lidDto.getGebruikersnaam());
setWachtwoord("");
setStraatnaam(lidDto.getStraatnaam());
setVastTelefoonNummer(lidDto.getVastTelefoonNummer());
setGsmNummer(lidDto.getGsmNummer());
setEmail(lidDto.getEmail());
setEmailOuders(lidDto.getEmailOuders());
setGeboortedatum(lidDto.getGeboortedatum());
setInschrijvingsdatum(Calendar.getInstance().getTime());
setType(lidDto.getType());
setFormule(lidDto.getFormule());
setGraad(lidDto.getGraad());
setGeslacht(lidDto.getGeslacht());
setInfoClub(lidDto.getInfoClub());
setInfoFederaal(lidDto.getInfoFederaal());
setPunten(0);
setPostcode(lidDto.getPostcode());
setStad(lidDto.getStad());
setNationaliteit(lidDto.getNationaliteit());
setGeboorteplaats(lidDto.getGeboorteplaats());
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getLidId(){
return this.lidId.get();
}
public LongProperty getLidIdProperty(){
return this.lidId;
}
/*
private void setLidId(long id){
this.lidId.set(id);
}*/
@Column
public long getPostcode(){
return this.postcode.get();
}
public LongProperty getPostcodeProperty(){
return this.postcode;
}
private void setPostcode(long postcode){
this.postcode.set(postcode);
}
@Column
public String getStad(){
return this.stad.get();
}
public StringProperty getStadProperty(){
return this.stad;
}
private void setStad(String stad){
this.stad.set(stad);
}
@Column
public String getNationaliteit(){
return this.nationaliteit.get();
}
public StringProperty getNationaliteitProperty(){
return this.nationaliteit;
}
private void setNationaliteit(String nationaliteit){
this.nationaliteit.set(nationaliteit);
}
@Column
public String getGeboorteplaats(){
return this.geboortePlaats.get();
}
public StringProperty getGeboorteplaatsProperty(){
return this.geboortePlaats;
}
private void setGeboorteplaats(String geboortePlaats){
this.geboortePlaats.set(geboortePlaats);
}
@Column
public long getHuisnummer(){
return this.huisnummer.get();
}
public LongProperty getHuisnummerProperty(){
return this.huisnummer;
}
private void setHuisnummer(long huisnummer){
this.huisnummer.set(huisnummer);
}
@Column
public String getFamilienaam(){
return this.familienaam.get();
}
public StringProperty getFamilienaamProperty(){
return this.familienaam;
}
public void setFamilienaam(String familienaam){
this.familienaam.set(familienaam);
}
@Column
public String getVoornaam(){
return this.voornaam.get();
}
public StringProperty getVoornaamProperty(){
return this.voornaam;
}
public void setVoornaam(String voornaam){
this.voornaam.set(voornaam);
}
@Column(unique=true)
public String getGebruikersnaam(){
return this.gebruikersnaam.get();
}
public StringProperty getGebruikersnaamProperty(){
return this.gebruikersnaam;
}
public void setGebruikersnaam(String gebruikersnaam){
this.gebruikersnaam.set(gebruikersnaam);
}
@Column
public String getWachtwoord(){
return this.wachtwoord.get();
}
public StringProperty getWachtwoordProperty(){
return this.wachtwoord;
}
public void setWachtwoord(String ww) throws NoSuchAlgorithmException, InvalidKeySpecException{
this.wachtwoord.set(generatePassword());
}
@Column
public String getStraatnaam(){
return this.straatnaam.get();
}
public StringProperty getStraatnaamProperty(){
return this.straatnaam;
}
public void setStraatnaam(String straatnaam){
this.straatnaam.set(straatnaam);
}
@Column
public String getVastTelefoonNummer(){
return this.vastTelefoonNummer.get();
}
public StringProperty getVastTelefoonNummerProperty(){
return this.vastTelefoonNummer;
}
public void setVastTelefoonNummer(String nummer){
valideerCommunicatiemiddel(nummer, Communicatiemiddel.TELEFOON);
this.vastTelefoonNummer.set(nummer);
}
@Column
public String getGsmNummer(){
return this.gsmNummer.get();
}
public StringProperty getGsmNummerProperty(){
return this.gsmNummer;
}
public void setGsmNummer(String nummer){
valideerCommunicatiemiddel(nummer, Communicatiemiddel.GSM);
this.gsmNummer.set(nummer);
}
@Column
public String getEmail(){
return this.email.get();
}
public StringProperty getEmailProperty(){
return this.email;
}
public void setEmail(String email){
valideerCommunicatiemiddel(email, Communicatiemiddel.EMAIL);
this.email.set(email);
}
@Column
public String getEmailOuders(){
return this.emailOuders.get();
}
public StringProperty getEmailOudersProperty(){
return this.emailOuders;
}
public void setEmailOuders(String email){
valideerCommunicatiemiddel(email, Communicatiemiddel.EMAIL);
this.emailOuders.set(email);
}
@Column
@Enumerated
public LidType getType(){
return this.type.get();
}
public ObjectProperty<LidType> getTypeProperty(){
return this.type;
}
public void setType(LidType type){
this.type.set(type);
}
@Column
@Temporal(TemporalType.DATE)
public Date getGeboortedatum(){
return geboortedatum.get();
}
public ObjectProperty<Date> getGeboortedatumProperty(){
return this.geboortedatum;
}
public void setGeboortedatum(Date geboortedatum){
this.geboortedatum.set(geboortedatum);
}
@Column
@Temporal(TemporalType.DATE)
public Date getInschrijvingsdatum(){
return inschrijvingsdatum.get();
}
public ObjectProperty<Date> getInschrijvingsdatumProperty(){
return this.inschrijvingsdatum;
}
public void setInschrijvingsdatum(Date inschrijvingsdatum){
this.inschrijvingsdatum.set(inschrijvingsdatum);
}
@Column
@Enumerated
public Formule getFormule(){
return this.formule.get();
}
public ObjectProperty<Formule> getFormuleProperty(){
return this.formule;
}
public void setFormule(Formule formule){
this.formule.set(formule);
}
@Column
@Enumerated
public Graad getGraad(){
return this.graad.get();
}
public ObjectProperty<Graad> getGraadProperty(){
return this.graad;
}
public void setGraad(Graad graad){
this.graad.set(graad);
}
@Column
@Enumerated
public Geslacht getGeslacht(){
return this.geslacht.get();
}
public ObjectProperty<Geslacht> getGeslachtProperty(){
return this.geslacht;
}
public void setGeslacht(Geslacht geslacht){
this.geslacht.set(geslacht);
}
@Column
public int getPunten(){
/*!*!*!*TODO*!*!*!* systeem van punten berekenen uitwerken */
return this.punten.get();
}
public IntegerProperty getPuntenProperty(){
return this.punten;
}
public void setPunten(int punten){
this.punten.set(punten);
}
@Column
public boolean getInfoClub(){
return this.infoClub.get();
}
public SimpleBooleanProperty getInfoClubProperty(){
return this.infoClub;
}
public void setInfoClub(boolean infoClub){
this.infoClub.set(infoClub);
}
@Column
public boolean getInfoFederaal(){
return this.infoFederaal.get();
}
public SimpleBooleanProperty getInfoFederaalProperty(){
return this.infoFederaal;
}
public void setInfoFederaal(boolean infoFederaal){
this.infoFederaal.set(infoFederaal);
}
protected static void valideerCommunicatiemiddel(String teValideren,
Communicatiemiddel optie) throws CommunicatiemiddelOngeldigException {
// validation
}
private String generatePassword() throws InvalidKeySpecException, NoSuchAlgorithmException{
// code
}
public enum Communicatiemiddel{
EMAIL,
GSM,
TELEFOON;
}
}
Вот файл persistence.xml:
<?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="taijitanPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>domein.Lid</class>
<class>domein.Activiteit</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://[...].[...].rds.amazonaws.com:1234;databaseName=[...]DB"/>
<property name="javax.persistence.jdbc.user" value="MasterAdmin"/>
<property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="javax.persistence.jdbc.password" value="[password]"/>
</properties>
</persistence-unit>
</persistence>
Я уже попробовал все предложенное здесь , но, похоже, ничего не работает.
Код сломался, когда я внес некоторые коррективы в валидацию сеттеров, добавил перечисление Communicatiemiddel в Lid ... Я не могу себе представить, что что-то сломалось.
Кто-нибудь знает, что еще мне не хватает?