简体   繁体   English

Spring,Jpa:引用未知实体。 XML映射的映射必须位于META-INF / orm.xml内部[解决]

[英]Spring, Jpa : references an unknown entity. mapped by XML need to be inside META-INF/orm.xml [solve]

i need your help. 我需要你的帮助。 i tried some things but yet, this mystery not solve 我尝试了一些事情,但是,这个谜尚无法解决

i already read and try posts with similar problem. 我已经阅读并尝试了类似问题的帖子。

i will be most thankful for any help. 我将非常感谢您的帮助。

use spring-boot + spring-data 1.5.6.RELEASE 使用spring-boot + spring-data 1.5.6.RELEASE

We have entity AbstractBelong abstract entity. 我们有实体AbstractBelong抽象实体。 Admin and User extends from him. AdminUser来自他。 and AbstractBelong extends from other entity(super mapped one) AbstractModel AbstractBelong从其他实体(超级映射的一个)延伸AbstractModel

AbstractModel 抽象模型

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@type")
public abstract class AbstractModel implements Serializable, HaveId {

    private Long id;
    private Long version;

    public AbstractModel(Long id, Long version) {
        this.id = id;
        this.version = version;
    }

    public Long getId() {
        return id;
    }

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

    @Override
    public boolean isHaveId() {
        return getId()!=null && getId()!=-1L;
    }

    @Override
    public boolean equals(Object obj) {
        return obj instanceof AbstractModel && equals(((AbstractModel) obj));
    }

    private boolean equals(AbstractModel model) {
        return ( getId()!=null && getId().equals(model.getId()));
    }

    public Long getVersion() {
        return version;
    }

    public void setVersion(Long version) {
        this.version = version;
    }

    @Override
    public String toString() {
        try {
            return Tools.toStringObjectMapper().writeValueAsString(this);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }
}

AbstractBelong 摘要所属

public class AbstractBelong extends AbstractModel {

    private String password;

    public AbstractBelong(Long id, Long version, String password) {
        super(id, version);
        this.password = password;
    }

    public AbstractBelong() {
        this(null,null,null);
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

User 用户

    @Entity
    @DiscriminatorValue( value = "U" )
    public class User extends AbstractUser {

        private Collection<Player> players;

        public User(Long id, Long version, String password, String name, String phoneNumber, String status, String email, Date birthDay, Collection<Player> players) {
            super(id, version, password, name, phoneNumber, status, email, birthDay);
            this.players = players;
        }

        public User() {
            this(null,null,null,null,null,null,null,null,null);
        }

        @Column
        @Override
        public String getName() {
            return super.getName();
        }

        @Column
        @Override
        public Date getBirthDay() {
            return super.getBirthDay();
        }

        @Column(nullable = false, unique = true)
        @Override
        public String getPhoneNumber() {
            return super.getPhoneNumber();
        }

        @Column
        @Override
        public String getStatus() {
            return super.getStatus();
        }

        @Column(unique = true)
        @Override
        public String getEmail() {
            return super.getEmail();
        }

        @OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
        public Collection<Player> getPlayers() {
            return players;
        }

        public void setPlayers(Collection<Player> players) {
            this.players = players;
        }
    }

Admin 管理员

@Entity
@DiscriminatorValue( value = "A" )
public class Admin extends AbstractAdmin {

    public Admin(Long id, Long version, String password) {
        super(id, version, password);
    }

    public Admin() {
        this(null, null,null);
    }
}

AppConfiguration 应用配置

@Configuration
@EnableAutoConfiguration
@EntityScan(basePackages = {"com.mayan.ameritrade"})
@EnableJpaRepositories(basePackages = {"com.mayan.ameritrade"})
@EnableTransactionManagement
public class DBConfiguration extends HibernateJpaAutoConfiguration {

    @SuppressWarnings("SpringJavaAutowiringInspection")
    public DBConfiguration(DataSource dataSource, JpaProperties jpaProperties, ObjectProvider<JtaTransactionManager> jtaTransactionManager, ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
        super(dataSource, jpaProperties, jtaTransactionManager, transactionManagerCustomizers);
    }

    @Override
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder factoryBuilder) {
        final LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = super.entityManagerFactory(factoryBuilder);
        entityManagerFactoryBean.setMappingResources("META-INF/belong.xml");
        entityManagerFactoryBean.setMappingResources("META-INF/action.xml");
        entityManagerFactoryBean.setMappingResources("META-INF/abstract-model.xml");
        System.err.println("MY DONE");
        return entityManagerFactoryBean;
    }

}

AbstractModel Mapping 抽象模型映射

<?xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
                 version="2.0">



    <mapped-superclass class="com.mayan.ameritrade.model.model.AbstractModel">
        <attributes>
            <id name="id">
                <generated-value strategy="IDENTITY"/>
            </id>
            <transient name="haveId"/>
        </attributes>
    </mapped-superclass>

</entity-mappings>

AbstractBelong Mapping 摘要所属映射

<?xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
                 http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
                 version="2.0">



    <entity class="com.mayan.ameritrade.model.model.system.AbstractBelong">

        <discriminator-column name="col"/>

        <inheritance strategy="SINGLE_TABLE"/>

        <attributes>
            <basic name="password">
                <column nullable="false"/>
            </basic>
        </attributes>

    </entity>


</entity-mappings>

Where we refrence to AbstractBelong 我们参考AbstractBelong

The Reference : 参考资料 :

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(nullable = false)
@Override
public AbstractBelong getBelong() {
    return super.getBelong();
}

Error : 错误:

Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.mayan.ameritrade.model.slide.Slide.belong references an unknown entity: com.mayan.ameritrade.model.model.system.AbstractBelong 由以下原因引起:org.hibernate.AnnotationException:com.mayan.ameritrade.model.slide.Slide.belong上的@OneToOne或@ManyToOne引用了未知实体:com.mayan.ameritrade.model.model.system.AbstractBelong

Slide is the Entity that reference to AbstractBelong . Slide是引用AbstractBelong的Entity。

We get my entity as jar. 我们把我的实体当成罐子。 so i extends from User and Admin . 所以我扩展了UserAdmin but i cant use annotations on AbstractBelong and AbstractModel . 但是我不能在AbstractBelongAbstractModel上使用注释。

Thanks for reading and any suggestion an help 感谢您的阅读和任何建议的帮助

Complete Error 完成错误

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [com/mayan/ameritrade/server/application/DBConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.mayan.ameritrade.model.slide.Slide.belong references an unknown entity: com.mayan.ameritrade.model.model.system.AbstractBelong
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
    at com.mayan.ameritrade.server.application.Application.main(Application.java:18) [classes/:na]
Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.mayan.ameritrade.model.slide.Slide.belong references an unknown entity: com.mayan.ameritrade.model.model.system.AbstractBelong
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:97) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processEndOfQueue(InFlightMetadataCollectorImpl.java:1786) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processFkSecondPassesInOrder(InFlightMetadataCollectorImpl.java:1730) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1617) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) ~[spring-orm-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) ~[spring-orm-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) ~[spring-orm-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
    ... 16 common frames omitted

Solve thank to @DN1 解决@ DN1

the mapping need to be inside the META-INF/orm.xml file. 映射需要在META-INF/orm.xml文件中。

and of curse i remove all my java configurations beans because its worthless in Spring-boot 并且诅咒我删除了我所有的Java配置bean,因为它在Spring-boot毫无价值

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM