Java org.eclipse.persistence.exceptions.ConversionException

Java org.eclipse.persistence.exceptions.ConversionException,java,jpa,javafx,eclipselink,Java,Jpa,Javafx,Eclipselink,我是eclipselink和persistence的初学者,我在javafx属性中使用@EmbeddedId @Entity public class Inwards implements Serializable{ Destination id; StringProperty orderName; IntegerProperty orderNo; ObjectProperty<LocalDate> orderDate; BooleanProperty save; public I

我是eclipselink和persistence的初学者,我在javafx属性中使用@EmbeddedId

@Entity
public class Inwards implements Serializable{
Destination id;
StringProperty orderName;
IntegerProperty orderNo;
ObjectProperty<LocalDate> orderDate;
BooleanProperty save;

public Inwards(){
    this.orderName = new SimpleStringProperty();
    this.orderNo = new SimpleIntegerProperty();
    this.orderDate = new SimpleObjectProperty<LocalDate>(LocalDate.of(2015, Month.MARCH, 5));
    this.save = new SimpleBooleanProperty();
}

public Inwards(Integer orderNo, LocalDate orderDate,String orderName){
    this();
    this.orderName.set(orderName);
    this.orderNo.set(orderNo);
    this.orderDate.set(orderDate);
}

@EmbeddedId
public Destination getId() {
    return id;
}

public void setId(Destination id) {
    this.id = id;
}

public StringProperty orderNameProperty(){
    return this.orderName;
}

public String getOrderName(){
    return orderName.get();
}

public void setOrderName(String orderName){
    this.orderName.set(orderName); 
}

public Integer getOrderNo() {
    return orderNo.get();
}

public void setOrderNo(Integer orderNo) {
    this.orderNo.set(orderNo);
}

public IntegerProperty orderNoProperty(){
    return this.orderNo;
}

public LocalDate getOrderDate() {
    return orderDate.get();
}

public void setOrderDate(LocalDate orderDate) {
    this.orderDate.set(orderDate); 
}

public ObjectProperty<LocalDate> orderDateProperty(){
    return this.orderDate;
}

public boolean isSave(){
    return save.get();
}

public void setSave(boolean save){
    this.save.set(save);
}

public BooleanProperty saveProperty() {
    return this.save;
}
}
这是主要课程

public class App 
{
public static void main( String[] args )
{
    EntityManagerFactory emf =       Persistence.createEntityManagerFactory("jpaDB");
    EntityManager em = emf.createEntityManager();
    EntityTransaction txn = em.getTransaction();

    Destination pk = new Destination(1,"State","8412"); 
    Inwards in = new Inwards(1,LocalDate.now(),"Abusamra");
    txn.begin(); 
    em.persist(in); 
    Inwards dest = em.find(Inwards.class, pk);
    txn.commit();
    System.out.println(dest);
    System.out.println("Order name = " + dest.getOrderName() + " "
+ "Order No. = " + dest.getOrderNo() + " " + "Order Date = "
+ dest.getOrderDate() +"Save"+dest.isSave());
}
}
但是我得到了org.eclipse.persistence.exceptions.ConversionException

这是stacktrace

[EL Config]: metadata: 2015-10-05 12:07:14.685--ServerSession(24424997)--Thread(Thread[main,5,main])--The access type for the persistent class [class com.qaf.jpaTut.entity.Inwards] is set to [PROPERTY].
[EL Config]: metadata: 2015-10-05 12:07:14.756--ServerSession(24424997)--Thread(Thread[main,5,main])--The access type for the persistent class [class com.qaf.jpaTut.entity.Destination] is set to [PROPERTY].
[EL Config]: metadata: 2015-10-05 12:07:14.773--ServerSession(24424997)--Thread(Thread[main,5,main])--The alias name for the entity class [class com.qaf.jpaTut.entity.Inwards] is being defaulted to: Inwards.
[EL Config]: metadata: 2015-10-05 12:07:14.777--ServerSession(24424997)--Thread(Thread[main,5,main])--The table name for entity [class com.qaf.jpaTut.entity.Inwards] is being defaulted to: INWARDS.
[EL Config]: metadata: 2015-10-05 12:07:14.814--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getOrderNo] is being defaulted to: ORDERNO.
[EL Config]: metadata: 2015-10-05 12:07:14.816--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [isSave] is being defaulted to: SAVE.
[EL Config]: metadata: 2015-10-05 12:07:14.817--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getPincode] is being defaulted to: PINCODE.
[EL Config]: metadata: 2015-10-05 12:07:14.817--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getDestId] is being defaulted to: DESTID.
[EL Config]: metadata: 2015-10-05 12:07:14.817--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getCity] is being defaulted to: CITY.
[EL Config]: metadata: 2015-10-05 12:07:14.825--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getOrderDate] is being defaulted to: ORDERDATE.
[EL Config]: metadata: 2015-10-05 12:07:14.83--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getOrderName] is being defaulted to: ORDERNAME.
[EL Info]: 2015-10-05 12:07:14.876--ServerSession(24424997)--Thread(Thread[main,5,main])--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd
[EL Fine]: connection: 2015-10-05 12:07:24.468--Thread(Thread[main,5,main])--Detected database platform: org.eclipse.persistence.platform.database.JavaDBPlatform
[EL Config]: connection: 2015-10-05 12:07:24.499--ServerSession(24424997)--Connection(1007487)--Thread(Thread[main,5,main])--connecting(DatabaseLogin(
platform=>JavaDBPlatform
user name=> ""
datasource URL=> "jdbc:derby:./jpaDB;create=true"))
[EL Config]: connection: 2015-10-05 12:07:24.505--ServerSession(24424997)--Connection(17672517)--Thread(Thread[main,5,main])--Connected: jdbc:derby:./jpaDB
User: APP
Database: Apache Derby  Version: 10.9.1.0 - (1344872)
Driver: Apache Derby Embedded JDBC Driver  Version: 10.9.1.0 - (1344872)
[EL Info]: connection: 2015-10-05 12:07:24.617--ServerSession(24424997)--Thread(Thread[main,5,main])--file:/C:/dev/JPA/jpaTut10_EmbeddedId/target/classes/_jpaDB login successful
[EL Fine]: sql: 2015-10-05 12:07:25.084--ServerSession(24424997)--Connection(17672517)--Thread(Thread[main,5,main])--CREATE TABLE INWARDS (ORDERDATE BLOB(2147483647), ORDERNAME VARCHAR(255), ORDERNO INTEGER, SAVE SMALLINT DEFAULT 0, PINCODE VARCHAR(255) NOT NULL, DESTID INTEGER NOT NULL, CITY VARCHAR(255) NOT NULL, PRIMARY KEY (PINCODE, DESTID, CITY))
Exception in thread "main" Local Exception Stack: 
Exception [EclipseLink-3002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ConversionException
Exception Description: The object [IntegerProperty [value: 1]], of class [class javafx.beans.property.SimpleIntegerProperty], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[destId-->INWARDS.DESTID]] with descriptor [RelationalDescriptor(com.qaf.jpaTut.entity.Destination --> [DatabaseTable(INWARDS)])], could not be converted to [class java.lang.Integer].
at org.eclipse.persistence.exceptions.ConversionException.couldNotBeConverted(ConversionException.java:75)
at org.eclipse.persistence.internal.helper.ConversionManager.convertObjectToInteger(ConversionManager.java:545)
at org.eclipse.persistence.internal.helper.ConversionManager.convertObject(ConversionManager.java:116)
at org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform.convertObject(DatasourcePlatform.java:179)
at org.eclipse.persistence.mappings.foundation.AbstractDirectMapping.getFieldValue(AbstractDirectMapping.java:787)
at org.eclipse.persistence.internal.jpa.CMP3Policy.createPrimaryKeyFromId(CMP3Policy.java:251)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.findInternal(EntityManagerImpl.java:797)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:719)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:588)
at com.qaf.jpaTut.App.main(App.java:63)

使用属性访问,而不是默认的字段访问。这意味着JPA提供者将从get方法中检索值,而不是直接从字段中访问它们。还请注意,由于IntegerProperty不能包装null值,因此应使用int作为属性类型,而不是Integer:


关于这一点,我们进行了很好的讨论。

即使在应用了上述建议之后,也会出现同样的错误。@James\u DAny解决了这个问题,或者它还没有解决@James\D
[EL Config]: metadata: 2015-10-05 12:07:14.685--ServerSession(24424997)--Thread(Thread[main,5,main])--The access type for the persistent class [class com.qaf.jpaTut.entity.Inwards] is set to [PROPERTY].
[EL Config]: metadata: 2015-10-05 12:07:14.756--ServerSession(24424997)--Thread(Thread[main,5,main])--The access type for the persistent class [class com.qaf.jpaTut.entity.Destination] is set to [PROPERTY].
[EL Config]: metadata: 2015-10-05 12:07:14.773--ServerSession(24424997)--Thread(Thread[main,5,main])--The alias name for the entity class [class com.qaf.jpaTut.entity.Inwards] is being defaulted to: Inwards.
[EL Config]: metadata: 2015-10-05 12:07:14.777--ServerSession(24424997)--Thread(Thread[main,5,main])--The table name for entity [class com.qaf.jpaTut.entity.Inwards] is being defaulted to: INWARDS.
[EL Config]: metadata: 2015-10-05 12:07:14.814--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getOrderNo] is being defaulted to: ORDERNO.
[EL Config]: metadata: 2015-10-05 12:07:14.816--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [isSave] is being defaulted to: SAVE.
[EL Config]: metadata: 2015-10-05 12:07:14.817--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getPincode] is being defaulted to: PINCODE.
[EL Config]: metadata: 2015-10-05 12:07:14.817--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getDestId] is being defaulted to: DESTID.
[EL Config]: metadata: 2015-10-05 12:07:14.817--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getCity] is being defaulted to: CITY.
[EL Config]: metadata: 2015-10-05 12:07:14.825--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getOrderDate] is being defaulted to: ORDERDATE.
[EL Config]: metadata: 2015-10-05 12:07:14.83--ServerSession(24424997)--Thread(Thread[main,5,main])--The column name for element [getOrderName] is being defaulted to: ORDERNAME.
[EL Info]: 2015-10-05 12:07:14.876--ServerSession(24424997)--Thread(Thread[main,5,main])--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd
[EL Fine]: connection: 2015-10-05 12:07:24.468--Thread(Thread[main,5,main])--Detected database platform: org.eclipse.persistence.platform.database.JavaDBPlatform
[EL Config]: connection: 2015-10-05 12:07:24.499--ServerSession(24424997)--Connection(1007487)--Thread(Thread[main,5,main])--connecting(DatabaseLogin(
platform=>JavaDBPlatform
user name=> ""
datasource URL=> "jdbc:derby:./jpaDB;create=true"))
[EL Config]: connection: 2015-10-05 12:07:24.505--ServerSession(24424997)--Connection(17672517)--Thread(Thread[main,5,main])--Connected: jdbc:derby:./jpaDB
User: APP
Database: Apache Derby  Version: 10.9.1.0 - (1344872)
Driver: Apache Derby Embedded JDBC Driver  Version: 10.9.1.0 - (1344872)
[EL Info]: connection: 2015-10-05 12:07:24.617--ServerSession(24424997)--Thread(Thread[main,5,main])--file:/C:/dev/JPA/jpaTut10_EmbeddedId/target/classes/_jpaDB login successful
[EL Fine]: sql: 2015-10-05 12:07:25.084--ServerSession(24424997)--Connection(17672517)--Thread(Thread[main,5,main])--CREATE TABLE INWARDS (ORDERDATE BLOB(2147483647), ORDERNAME VARCHAR(255), ORDERNO INTEGER, SAVE SMALLINT DEFAULT 0, PINCODE VARCHAR(255) NOT NULL, DESTID INTEGER NOT NULL, CITY VARCHAR(255) NOT NULL, PRIMARY KEY (PINCODE, DESTID, CITY))
Exception in thread "main" Local Exception Stack: 
Exception [EclipseLink-3002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ConversionException
Exception Description: The object [IntegerProperty [value: 1]], of class [class javafx.beans.property.SimpleIntegerProperty], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[destId-->INWARDS.DESTID]] with descriptor [RelationalDescriptor(com.qaf.jpaTut.entity.Destination --> [DatabaseTable(INWARDS)])], could not be converted to [class java.lang.Integer].
at org.eclipse.persistence.exceptions.ConversionException.couldNotBeConverted(ConversionException.java:75)
at org.eclipse.persistence.internal.helper.ConversionManager.convertObjectToInteger(ConversionManager.java:545)
at org.eclipse.persistence.internal.helper.ConversionManager.convertObject(ConversionManager.java:116)
at org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform.convertObject(DatasourcePlatform.java:179)
at org.eclipse.persistence.mappings.foundation.AbstractDirectMapping.getFieldValue(AbstractDirectMapping.java:787)
at org.eclipse.persistence.internal.jpa.CMP3Policy.createPrimaryKeyFromId(CMP3Policy.java:251)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.findInternal(EntityManagerImpl.java:797)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:719)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:588)
at com.qaf.jpaTut.App.main(App.java:63)
@Embeddable
@Access(AccessType.PROPERTY)
public class Destination implements Serializable {

    StringProperty city;
    StringProperty pincode;
    IntegerProperty destId;

    public Destination(){
        this.city = new SimpleStringProperty();
        this.pincode = new SimpleStringProperty();
        this.destId = new SimpleIntegerProperty();
    }

    public Destination(Integer destId,String city,String pincode){
        this();
        this.destId.set(destId);
        this.city.set(city);
        this.pincode.set(pincode);  
    }

    public IntegerProperty destIdProperty(){
        return destId;
    }

    public final int getDestId(){
        return destIdProperty().get();
    }

    public final void setDestId(int destId){
        destIdProperty().set(destId);
    }

    public StringProperty cityProperty(){
        return city;
    }

    public String getCity() {
        return cityProperty().get();
    }

    public void setCity(String city) {
        cityProperty().set(city); 
    }

    public StringProperty pincodeProperty(){
        return pincode;
    }

    public String getPincode() {
        return pincodeProperty().get();
    }

    public void setPincode(String pincode) {
        pincodeProperty().set(pincode); 
    }

    @Override
    public int hashCode(){
        final int prime = 31;
        int result = 1;

        result = prime * result
        + ((city == null) ? 0 : city.hashCode())
                + ((pincode == null) ? 0 : pincode.hashCode())
                + ((destId == null) ? 0 : destId.hashCode());   
        return result;
    }

    @Override
    public boolean equals(Object obj){
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Destination other = (Destination) obj;
        if (city == null) {
            if (other.city != null)
                return false;
        } else if (!city.equals(other.city))
            return false;
                if(pincode != other.pincode)
                    return false;
        if (destId != other.destId)
            return false;
        return true;

    }   

}