实体类是非实体?

时间:2014-08-19 07:49:18

标签: java jpa persistence eclipselink

我收到以下错误:

[class model.VerkaufterArtikel]在关系属性[field verkauf]中使用非实体[class model.Verkauf]作为目标实体。

但该类列在persistence.xml中。我也尝试不排除未列出的课程。

我使用EclipseLink作为JPA实现。

我试图排除这种关系,但后来我无法坚持Verkauf。其他类正在正常工作。

情况是:我有一个销售(Verkauf),其中包含已售商品(VerkaufteArtikel)。

model.Verkauf:

package model;


@Entity
@Table(name = "verkauf")
@NamedQuery(name = "Verkauf.findAll", query = "SELECT v FROM Verkauf v")
public class Verkauf implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private int verkID;



    private int gegeben;

    @OneToMany(mappedBy="verkauf")
    private List<VerkaufterArtikel> verkaufArtikels = new ArrayList<VerkaufterArtikel>();

model.VerkaufterArtikel:

@Entity
@Table(name="verkauf_artikel")
@NamedQuery(name="VerkaufArtikel.findAll", query="SELECT v FROM VerkaufterArtikel v")
public class VerkaufterArtikel implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private int id;

    private float anz;

    private int artID;

    private int preispro;


    @ManyToOne
    @JoinColumn(name="verkaufID")
    private Verkauf verkauf;

我的持久性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="dbm" transaction-type="RESOURCE_LOCAL">
        <!-- <exclude-unlisted-classes>false</exclude-unlisted-classes>-->
        <class>model.Artikel</class>
        <class>model.ArtikelInWarenkorb</class>
        <class>model.VerkaufterArtikel</class>
        <class>model.Verkaeufer</class>
        <class>model.Verkauf</class>
        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mdb" />
            <property name="javax.persistence.jdbc.user" value="user" />
            <property name="javax.persistence.jdbc.password" value="password" />
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="eclipselink.allow-zero-id" value="true" />
        </properties>


    </persistence-unit>
</persistence>

表格:

CREATE TABLE `verkauf_artikel` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`verkaufID` INT(11) NULL DEFAULT NULL,
`artID` INT(11) NULL DEFAULT NULL,
`anz` FLOAT NULL DEFAULT NULL,
`preispro` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`),

CREATE TABLE `verkauf` (


id` INT(11) NOT NULL AUTO_INCREMENT,
    `verkID` INT(11) NULL DEFAULT '0',
    `zeit` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `gegeben` INT(11) NOT NULL DEFAULT '0',
        PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为你的@ManyToOneMapping不正确,它应该是这样的:

@ManyToOne
@JoinColumn(name="verkID")
private Verkauf verkauf;

答案 1 :(得分:0)

我终于找到了这个错误的原因。

我在类的底部有一个getSum()方法。我删除了方法,现在一切正常!

public int getSum() {

    return (int) getVerkaufArtikels()
            .stream()
            .mapToDouble(acc -> ((double) acc.getPreispro() * acc.getAnz()))
            .sum();
}