首页 文章

双向hibernate - org.hibernate.AnnotationException:未知的mappedBy in:error

提问于
浏览
0

我有4个表kode_pos,korwil,用户和wafat . 在Korwil类中,它保存来自用户的外键并将主键提供给kode_pos,这意味着在korwil类@OneToOne和@OneToMany中有2个映射,

我收到了这个错误

org.hibernate.AnnotationException:未知的mappedBy在:org.ppbni.splatter.model.UserAdmin.korwil,引用未知属性:org.ppbni.splatter.model.Korwil.useradmin`当我运行应用程序〜

这是错误的,

enter image description here

这是我的kode_pos类

package org.ppbni.splatter.model;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.MapsId;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.ManyToOne;
import javax.persistence.CascadeType;

@SuppressWarnings("serial")
@Entity
@Table(name="kode_pos")
public class KodePos implements Serializable{

    @Id
    @Column(name="kode_pos", unique=true, nullable=false)
    private String kode_pos;

    @Column(name="kelurahan")
    private String kelurahan;

    @Column(name="kecamatan")
    private String kecamatan;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="kode_korwil")
    private Korwil korwil;

    /**Setter and Getter Methods**/
}

这是我的korwil课,

package org.ppbni.splatter.model;

import java.io.Serializable;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.MapsId;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.CascadeType;

@SuppressWarnings("serial")
@Entity
@Table(name="korwil")
public class Korwil implements Serializable{

    @Id
    @Column(name="kode_korwil", unique=true, nullable=false)
    private String kode_korwil;

    @Column(name="nama_korwil")
    private String nama_korwil;

    @Column(name="alias_jabatan")
    private String alias_jabatan;

    @Column(name="jabatan_korwil")
    private String jabatan_korwil;

    @OneToMany(fetch = FetchType.LAZY, mappedBy="korwil")
    private Set<KodePos> kodepos;

    @OneToOne
    @MapsId
    @JoinColumn(name="no_dana")
    private UserAdmin useradmin;

    /**Setter and Getter Methods**/

}

这是我的用户类,

package org.ppbni.splatter.model;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.OneToOne;
import javax.persistence.CascadeType;

@SuppressWarnings("serial")
@Entity
@Table(name="user")
public class UserAdmin implements Serializable{

    @Id
    @GeneratedValue
    @Column(name="no_dana", unique=true, nullable=false)
    private String no_dana;

    @Column(name="npp")
    private String npp;

    @Column(name="password")
    private String password;

    @OneToOne(mappedBy="useradmin", cascade=CascadeType.ALL)
    private Wafat wafat;

    @OneToOne(mappedBy="useradmin", cascade=CascadeType.ALL)
    private Korwil korwil;

    /**other field**//

    /**setter and gettter methods**/
}

这是我的wafat课程,

package org.ppbni.splatter.model;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.MapsId;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@SuppressWarnings("serial")
@Entity
@Table(name="wafat")
public class Wafat implements Serializable{

    @Id
    @Column(name="kode_wafat", unique=true, nullable=false)
    private String kode_wafat;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="tgl_wafat")
    private Date tgl_wafat;

    @Column(name="usia_wafat")
    private int usia_wafat;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="tgl_makam")
    private Date tgl_makam;

    @Column(name="tempat_makam")
    private String tempat_makam;

    @OneToOne
    @MapsId
    @JoinColumn(name="no_dana")
    private UserAdmin useradmin;

    /**Setter and Getter Methods**/
}

这是我的控制员,

@SuppressWarnings("deprecation")
@RequestMapping(value="/user/daftar-anggota-ppbni.html")
public ModelAndView userDaftarAnggotaPPBNI(ModelMap model, HttpServletRequest request, HttpServletResponse response)throws Exception{

    SessionFactory factory = new Configuration().configure().buildSessionFactory();
    Session session = factory.openSession();

    String nama = request.getParameter("nama");
    String kota = request.getParameter("kota");

    System.out.println(nama);
    System.out.println(kota);

    Query query = session.createQuery("from UserAdmin where (nama_depan = :namadepan or nama_tengah = :namatengah or nama_belakang = :namabelakang) or kota = :kota");
    query.setParameter("namadepan", nama);
    query.setParameter("namatengah", nama);
    query.setParameter("namabelakang", nama);
    query.setParameter("kota", kota);
    System.out.println(query);

    @SuppressWarnings("unchecked")
    List <UserAdmin> result = query.list();

    for(int i=0; i < result.size(); i++){

        model.addObject("result", result);
    }

    session.close();
    factory.close();

    return userDaftarAnggota(model);

}

这是错误,

org.hibernate.AnnotationException:未知的mappedBy in:org.ppbni.splatter.model.UserAdmin.korwil,引用的属性unknown:org.ppbni.splatter.model.Korwil.useradmin org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass)的.java:152)在org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1686)在org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1393)在org.hibernate.cfg.Configuration.buildSessionFactory( Configuration.java:1826)atg.ppbni.splatter.web.controller.UserController.userDaftarAnggotaPPBNI(UserController.java:97)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source )atg.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)atg的sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source) .springframework.web.method.support.InvocableHan dlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)位于org.springframework.web.servlet.mvc.method.annotation的org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) . RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)位于org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter的org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) . 在Org.springframework上的org.springframework.web.servlet.Dispatcher服务中提供了org.springframework.web.servlet.DispatcherServ.doDatch(DispatcherServlet.java:856)中的org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)处理(AbstractHandlerMethodAdapter.java:80) .web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)在org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)在javax.servlet.http.HttpSer vlet.service(HttpServlet.java:647)在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)在javax.servlet.http.HttpServlet.service(HttpServlet.java:728)在org.apache .catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)atg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java) :129)位于org.apache.catalina.core的org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)的com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77) . ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330)at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor . java:118)org.springframework org.springframework.security.web.access上的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)中的.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)位于org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java)的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)的.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) :103)在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)at atorg.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)位于org.springframework.security.web的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342) . 在org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter . java:45)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)at org .springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)org.springframework.security.web.authentication.Abst ractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter . java:105)org.springframework上的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) .gcurity.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342)org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy) .java:160)org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)org.springframework.web.filter.DelegatingFilterProxy.doFilte r(DelegatingFilterProxy.java:259)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)位于org.apache的org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)的.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java) :472)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)at org.apache.catalina.valves . 访问org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)中的org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)上的AccessLogValve.invoke(AccessLogValve.java:936) org.apac上的.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) he.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)atg.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:312)at java.util.concurrent.ThreadPoolExecutor.runWorker( java.util.concurrent.ThreadPoolExecutor上的未知来源)java.lang.Thread.run上的$ Worker.run(未知来源)(未知来源)

任何帮助都会很愉快:)

1 回答

  • 0

    Hibernate通过持久化类生成数据库模式时发生异常 .

    我已经用Hibernate 5检查了你的映射 - 没有任何这样的异常(我当然不确定代码的其他部分) .

    我不知道你的Hibernate版本,看起来像Hibernate 4.但无论如何,这部分代码异常上升

    PersistentClass otherSide = (PersistentClass) persistentClasses.get( value.getReferencedEntityName() );
        Property otherSideProperty;
        try {
            if ( otherSide == null ) {
                throw new MappingException( "Unable to find entity: " + value.getReferencedEntityName() );
            }
            otherSideProperty = BinderHelper.findPropertyByName( otherSide, mappedBy );
        }
        catch (MappingException e) {
            throw new AnnotationException(
                    "Unknown mappedBy in: " + StringHelper.qualify( ownerEntity, ownerProperty )
                            + ", referenced property unknown: "
                            + StringHelper.qualify( value.getReferencedEntityName(), mappedBy )
            );
        }
        if ( otherSideProperty == null ) {
            throw new AnnotationException(
                    "Unknown mappedBy in: " + StringHelper.qualify( ownerEntity, ownerProperty )
                            + ", referenced property unknown: "
                            + StringHelper.qualify( value.getReferencedEntityName(), mappedBy )
            );
        }
    

    抛出 throw new MappingException( "Unable to find entity: " + value.getReferencedEntityName() ) 并 grab 它是一个非常奇怪的逻辑 . 并且错误消息非常混乱 .

    otherSide 是你的 KorwilotherSideProperty 是你的 Korwil.useradmin . Hibernate不认为 Korwil 是一个实体 . 可能的原因:您没有将其添加到映射中,或者扫描实体的包时遇到一些问题 . 你需要弄清楚为什么Hibernate认为 UserAdmin 是一个实体而 Korwil 不是 .

相关问题