0
votes

I'am working with JPA eclipselink at the moment and like to connect to my Database with Eclipselink

I have some classes for de Tables in My database and a Query to get my Entries:

final Query query = entityManager.createQuery("SELECT q FROM FDC_DBCHANGE q ORDER BY q.CHANGE_ID");

I made some classes for my tables:

FDC_DBCHANGE

package com.bechtle.dbchanges.model;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class FDC_DBCHANGE {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private long CHANGE_ID;
    private String CHANGE_NAME;
    private String CHANGE_DATE;
    private int CHANGE_NUMBER;

    @OneToMany(mappedBy = "FDC_DBCHANGE")
    private final List<FDC_EXECUTED> checkBoxes = new ArrayList<FDC_EXECUTED>();

public String getChangeName() {
    return CHANGE_NAME;
}

public void setChangeName(final String pChangeName) {
    CHANGE_NAME = pChangeName;
}

public String getChangeDate() {
    return CHANGE_DATE;
}

public void setChangeDate(final String pChangeDate) {
    CHANGE_DATE = pChangeDate;
}

public int getChangeNumber() {
    return CHANGE_NUMBER;
}

public void setChangeNumber(final int pChangeNumber) {
    CHANGE_NUMBER = pChangeNumber;
}

public List<FDC_EXECUTED> getCheckBoxes() {
    return checkBoxes;
}

@Override
public String toString() {
    return "FDC_DBCHANGE [CHANGE_NAME=" + CHANGE_NAME + ", CHANGE_DATE="
            + CHANGE_DATE + "CHANGE_NUMBER=" + CHANGE_NUMBER + "]";
}
}

FDC_EXECUTED

package com.bechtle.dbchanges.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

@Entity
public class FDC_EXECUTED {

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int ENTRY_ID;
private FDC_DBCHANGE FDC_DBCHANGE;
private FDC_SYSTEM FDC_SYSTEM;

@OneToOne
@JoinColumn
public FDC_DBCHANGE getDbChange() {
    return FDC_DBCHANGE;
}

public void setDbChange(final FDC_DBCHANGE pDbChange) {
    FDC_DBCHANGE = pDbChange;
}

@OneToOne
@JoinColumn
public FDC_SYSTEM getSystem() {
    return FDC_SYSTEM;
}

public void setSystem(final FDC_SYSTEM pSystem) {
    FDC_SYSTEM = pSystem;
}
}

and FDC_SYSTEM

package com.bechtle.dbchanges.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class FDC_SYSTEM {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int SYSTEM_ID;
private String NAME;
private FDC_EXECUTED fdcexecuted;

public String getName() {
    return NAME;
}

public void setName(final String pName) {
    NAME = pName;
}

@OneToMany(mappedBy = "FED_SYSTEM")
public FDC_EXECUTED getExecuted() {
    return fdcexecuted;
}

public void setExecuted(final FDC_EXECUTED pExecuted) {
    fdcexecuted = pExecuted;
}
}

When I run it on my Tomcat there is this Exception:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00904: "FDC_DBCHANGE_CHANGE_ID": invalid identifier

Error Code: 904 Call: SELECT ENTRY_ID, FDC_DBCHANGE_CHANGE_ID, FDC_SYSTEM_SYSTEM_ID FROM FDC_EXECUTED WHERE (FDC_DBCHANGE_CHANGE_ID = ?) bind => [1 parameter bound] Query: ReadAllQuery(name="checkBoxes" referenceClass=FDC_EXECUTED sql="SELECT ENTRY_ID, FDC_DBCHANGE_CHANGE_ID, FDC_SYSTEM_SYSTEM_ID FROM FDC_EXECUTED WHERE (FDC_DBCHANGE_CHANGE_ID = ?)") org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:932) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:816) javax.servlet.http.HttpServlet.service(HttpServlet.java:620) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:801) javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

Eclipselink tries to run the SQL Statement SELECT ENTRY_ID, FDC_DBCHANGE_CHANGE_ID, FDC_SYSTEM_SYSTEM_ID FROM FDC_EXECUTED WHERE (FDC_DBCHANGE_CHANGE_ID = ?)

instead of SELECT ENTRY_ID, CHANGE_ID, SYSTEM_ID FROM FDC_EXECUTED WHERE (CHANGE_ID = ?)

I don't konw why...

I hope someone can help me and sorry for my bad english...

obsidianfarmer

1

1 Answers

0
votes

Ok, problem solved, its cause Eclipselink needs an OID I have no acces to, that was the problem...