有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java jpa子图和MappedSuperclass抛出未知实体

我对子图有一个愚蠢的问题。这是我第一次使用实体图

我的公共库中有以下类:

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.ManyToMany;
import javax.persistence.MappedSuperclass;

@MappedSuperclass
public abstract class NamedDomainObjectWithFiles extends NamedDomainObject {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@ManyToMany(cascade = CascadeType.ALL)
private Set<File> files;

public Set<File> getFiles() {
    return files;
}

public void setFiles(Set<File> files) {
    this.files = files;
}

}

import java.util.Date;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.ManyToMany;
import javax.persistence.NamedAttributeNode;
import javax.persistence.NamedEntityGraph;
import javax.persistence.NamedEntityGraphs;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@NamedQueries({ @NamedQuery(name = File.findAll, query = "SELECT f FROM File f ORDER BY f.createdOn"),
@NamedQuery(name = File.findByName, query = "SELECT f FROM File f WHERE f.name = :name") })

@NamedEntityGraphs({ 
@NamedEntityGraph(name = File.EG_LoadRoles, attributeNodes = {   @NamedAttributeNode("roles") }),
@NamedEntityGraph(name = File.EG_LoadALL, includeAllAttributes=true)
})
@Entity
public class File extends NamedDomainObject{

/**
 * 
 */
private static final long serialVersionUID = 3696244073145217983L;

public static final String findByName = "File.findByName";
public static final String findAll = "File.findAll";
public static final String EG_LoadRoles = "File.EG_LoadRoles";
public static final String EG_LoadALL = "File.EG_LoadALL";

@ManyToMany
private Set<Role> roles;

@ManyToMany
private Set<FileCategory> fileCategories;

public Set<Role> getRoles() {
    return roles;
}

public void setRoles(Set<Role> roles) {
    this.roles = roles;
}

public Set<FileCategory> getFileCategories() {
    return fileCategories;
}

public void setFileCategories(Set<FileCategory> fileCategories) {
    this.fileCategories = fileCategories;
}

}

还有我战争中的昆德班

import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.NamedAttributeNode;
import javax.persistence.NamedEntityGraph;
import javax.persistence.NamedEntityGraphs;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.NamedSubgraph;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import de.xxx.common.domain.Address;
import de.xxx.common.domain.NamedDomainObjectWithFiles;

@NamedQueries({ @NamedQuery(name = Kunde.findAll, query = "SELECT b FROM      Kunde b where b.activ=1 ORDER BY b.name"),
    @NamedQuery(name = Kunde.findByName, query = "SELECT b FROM Kunde b WHERE b.name = :name") })
@NamedEntityGraphs({ 
@NamedEntityGraph(name = Kunde.EG_loadAll,  
        attributeNodes = {
                @NamedAttributeNode(value = "files", subgraph = Kunde.SG_filesLoadAll)
        }, 
        subgraphs = {
                @NamedSubgraph(name = Kunde.SG_filesLoadAll, 
                        attributeNodes = { 
                                @NamedAttributeNode("roles"),
                                @NamedAttributeNode("fileCategories") 
                        }
                ) 
        }
) 
})

@Entity
public class Kunde extends NamedDomainObjectWithFiles {

/**
 * 
 */
private static final long serialVersionUID = -7339308550470317787L;

public static final String findByName = "Kunde.findByName";
public static final String findAll = "Kunde.findAll";
public static final String EG_loadAll = "Kunde.EG_loadAll";

public static final String SG_filesLoadAll = "Kunde.SG_filesLoadAll";

@OneToMany(cascade = CascadeType.ALL, mappedBy = "kunde", orphanRemoval = true)
private List<Objekt> objekte;

public Kunde() {
}

public List<Objekt> getObjekte() {
    return objekte;
}

public void setObjekte(List<Objekt> objekte) {
    this.objekte = objekte;
}

}

在我尝试激活子图“Kunde”之前,一切正常。我班上的学生都是学生。在启动期间,我遇到以下异常:

org.hibernate.MappingException: Unknown entity:   de.xxx.common.domain.NamedDomainObjectWithFiles

如果我只设置

@NamedEntityGraph(name = Kunde.EG_loadAll,  
        attributeNodes = {
                @NamedAttributeNode(value = "files")
        }

启动期间不会引发异常

我希望你能帮助我

我在wildfly 8.1和9.0.1上用相同的结果测试了这段代码

迈克尔

@Edit:

这是我的坚持。xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="primary">
        <jta-data-source>java:jboss/datasources/ObjektmanagementDS</jta-data-source>
        <jar-file>lib/common-0.0.1.jar</jar-file>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <property name="hibernate.connection.url"
                value="jdbc:mysql://localhost:3306/objektmanagement?UseUnicode=true&amp;characterEncoding=utf8" />
            <property name="hibernate.connection.username" value="root" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.format_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

共 (0) 个答案