[英]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. Admin
和User
来自他。 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
. 所以我扩展了User
和Admin
。 but i cant use annotations on AbstractBelong
and AbstractModel
. 但是我不能在AbstractBelong
和AbstractModel
上使用注释。
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.