如何通过Hibernate和JPA获取用户名?

时间:2017-04-05 16:26:58

标签: java hibernate jpa

我有两个实体:

@Entity
@Table(name = "entries")
public class Entry {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

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

    @Column(name = "user_id")
    private Long user_id;

    @ManyToOne
    @JoinColumn(name = "user_id", nullable = false)
    private User user;


    public Long getUser_id() {
        return user_id;
    }

    public void setUser_id(Long user_id) {
        this.user_id = user_id;
    }

    public Long getId() {
        return id;
    }

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

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

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

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

    @Transient
    private String confirmPassword;

    @ManyToMany
    @JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;

    @OneToMany(mappedBy = "users", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    private Set<Entry> attachments = new HashSet<Entry>();


    public Long getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

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

    public String getConfirmPassword() {
        return confirmPassword;
    }

    public void setConfirmPassword(String confirmPassword) {
        this.confirmPassword = confirmPassword;
    }

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

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

}

My database

我的实体中的这些行在启动我的应用程序时会导致错误:

@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;**

@OneToMany(mappedBy = "users", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
private Set<Entry> attachments = new HashSet<Entry>();

我在启动时出错:

  

05-Apr-2017 19:34:11.786 INFO [RMI TCP连接(4)-127.0.0.1]   org.apache.catalina.core.ApplicationContext.log没有Spring   在classpath 05-Apr-2017上检测到的WebApplicationInitializer类型   19:34:11.933 INFO [RMI TCP连接(4)-127.0.0.1]   org.apache.catalina.core.ApplicationContext.log初始化Spring   root WebApplicationContext 05-Apr-2017 19:34:14.088严重[RMI TCP   (4)连接-127.0.0.1]   org.apache.catalina.core.StandardContext.listenerStart异常   将上下文初始化事件发送到类的侦听器实例   org.springframework.web.context.ContextLoaderListener   org.springframework.beans.factory.BeanCreationException:错误   创建名为&entityManagerFactory&#39;的bean定义于   ServletContext资源[/WEB-INF/appconfig-data.xml]:调用   init方法失败;嵌套异常是   javax.persistence.PersistenceException:[PersistenceUnit:default]   无法构建Hibernate SessionFactory   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)     在   org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:305)     在   org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)     在   org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)     在   org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)     在   org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1045)     在   org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:824)     在   org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)     在   org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446)     在   org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328)     在   org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)     在   org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4754)     在   org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5216)     在   org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     在   org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)     在   org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)     在   org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)     在   org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1702)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)at   org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)     在   com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)     在   com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)     在   org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:482)     在   org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:431)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)at   org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)     在   com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)     在   com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)     在   javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)     在   javax.management.remote.rmi.RMIConnectionImpl.access $ 300(RMIConnectionImpl.java:76)     在   javax.management.remote.rmi.RMIConnectionImpl $ PrivilegedOperation.run(RMIConnectionImpl.java:1309)     在   javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)     在   javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)at   sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)     在sun.rmi.transport.Transport $ 1.run(Transport.java:200)at   sun.rmi.transport.Transport $ 1.run(Transport.java:197)at   java.security.AccessController.doPrivileged(Native Method)at   sun.rmi.transport.Transport.serviceCall(Transport.java:196)at   sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)     在   sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0(TCPTransport.java:826)     在   sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.lambda $运行$ 0(TCPTransport.java:683)     在java.security.AccessController.doPrivileged(Native Method)at   sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run(TCPTransport.java:682)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617)     在java.lang.Thread.run(Thread.java:745)引起:   javax.persistence.PersistenceException:[PersistenceUnit:default]   无法构建Hibernate SessionFactory   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249)     在   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access $ 600(EntityManagerFactoryBuilderImpl.java:120)     在   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform(EntityManagerFactoryBuilderImpl.java:860)     在   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform(EntityManagerFactoryBuilderImpl.java:850)     在   org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425)     在   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849)     在   org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)     在   org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:338)     在   org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)     在   org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)     ... 57更多引起:org.hibernate.AnnotationException:mappedBy   引用未知的目标实体属性:   net.proselyte.springsecurityapp.model.Entry.users in   net.proselyte.springsecurityapp.model.User.attachments at   org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:769)     在   org.hibernate.cfg.annotations.CollectionBinder $ 1.secondPass(CollectionBinder.java:729)     在   org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:70)     在   org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1697)     在   org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1426)     在   org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)     在   org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform(EntityManagerFactoryBuilderImpl.java:857)     ......还有65个

     

05-Apr-2017 19:34:14.106 INFO [RMI TCP连接(4)-127.0.0.1]   org.apache.catalina.core.ApplicationContext.log关闭Spring root   WebApplicationContext的

我希望用连接表 - 用户获取所有条目。我想获得这样的条目:

@RequestMapping(value = "/entries", method = RequestMethod.GET)
    public String entries(Model model) {
        List<Entry> entries = entryService.findAllEntries();
        model.addAttribute("entries", entries); 
        return "entry";
    }

我的appconfig-data.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/data/jpa
    http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan" value="net.proselyte.springsecurityapp.model"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

    <bean id="transactionManager"
          class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>



    <tx:annotation-driven/>

    <jpa:repositories base-package="net.proselyte.springsecurityapp.dao"/>
</beans>

对于不允许我启动应用程序以及如何通过加入实现查询的关系,我的错误是什么?

0 个答案:

没有答案