【问题标题】:Entity Class is a non Entity?实体类是非实体?
【发布时间】:2014-08-19 07:49:18
【问题描述】:

我收到以下错误:

[class model.VerkaufterArtikel] 使用非实体 [class model.Verkauf] 作为关系属性 [field 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;

谢谢!

【问题讨论】:

    标签: java jpa persistence eclipselink


    【解决方案1】:

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

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

    【讨论】:

    • 我根据en.wikibooks.org/wiki/Java_Persistence/…选择了verkaufID 我也尝试了你的建议。同样的错误。我的情况和第一个例子一样。
    • 对不起,刚放假回来,我需要一些时间来热身:-) 看来VerkaufArtikel是通过verkID而不是verkaufID映射到Verkauf的。我已经更新了我的答案。
    • 我用表格定义更新了问题。我不确定 verkID 是否是解决方案
    • 你是对的,我被误导了,因为你在 Verkauf 表中有 verkID 字段。您的配置似乎一切正常。您能否发布有关您正在使用的应用程序服务器的更多信息?您是否使用带有嵌入式 Glassfish 的 NetBeans?如果是这种情况,您可以尝试删除缓存文件夹 ~/.netbeans/7.0/var/cache。
    • 我没有使用应用服务器。我试图删除所有缓存,甚至重新签出到新工作区......仍然是同样的问题
    【解决方案2】:

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

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

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

    【讨论】:

    • 那个方法是做什么的?你也可以添加它吗?为什么会触发给定的问题?
    • 我将方法添加到答案中。我不知道是什么原因。我认为实体应该只包含它们的字段以及 getter 和 setter。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2016-02-27
    • 2013-02-02
    相关资源
    最近更新 更多