我收到以下错误:
[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;
谢谢!
答案 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();
}