Java Hibernate在几个select查询或insert查询后挂起

Java Hibernate在几个select查询或insert查询后挂起,java,mysql,spring,hibernate,Java,Mysql,Spring,Hibernate,我正在使用hibernate关系开发spring和hibernate web应用程序,它运行了3次没有问题,从数据库中获取记录没有问题,但在4次应用程序挂起或冻结时,当我重新启动tomcat服务器时,一切正常,在4次尝试时再次挂起或冻结。应用程序挂起或冻结时没有让我感到困惑的错误。当我测试另一个没有在Hibernate上使用关系的类运行良好时,我怀疑是关系,但我不知道~ 这是我的Hibernate关系引用~ 这是我的erd 这是我的用户类 @SuppressWarnings("serial

我正在使用hibernate关系开发spring和hibernate web应用程序,它运行了3次没有问题,从数据库中获取记录没有问题,但在4次应用程序挂起或冻结时,当我重新启动tomcat服务器时,一切正常,在4次尝试时再次挂起或冻结。应用程序挂起或冻结时没有让我感到困惑的错误。当我测试另一个没有在Hibernate上使用关系的类运行良好时,我怀疑是关系,但我不知道~

这是我的Hibernate关系引用~

这是我的erd

这是我的用户类

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

private String no_dana;
private String npp;

@Id
@Column(name="no_dana", unique=true, nullable=false, updatable=false)
public String getNo_dana() {
    return no_dana;
}
public void setNo_dana(String no_dana) {
    this.no_dana = no_dana;
}
@Column(name="npp")
public String getNpp() {
    return npp;
}
private Set<Tanya> tanya;

@OneToMany(fetch= FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="user")
public Set<Tanya> getTanya() {
    return tanya;
}
public void setTanya(Set<Tanya> tanya) {
    this.tanya = tanya;
}

private Set<Jawab> jawab;

@OneToMany(fetch = FetchType.LAZY, mappedBy="user")
public Set<Jawab> getJawab() {
    return jawab;
}
public void setJawab(Set<Jawab> jawab) {
    this.jawab = jawab;
}
}
这是我的刀的样本(来自tanya类)

@Autowired
私人TanyaDaoImpl(SessionFactory SessionFactory){
设置会话工厂(会话工厂);
}
@抑制警告(“未选中”)
@凌驾
public Tanya get(int id_Tanya)抛出异常{
DetachedCriteria=DetachedCriteria.forClass(Tanya.class).add(Restrictions.eq(“id_Tanya”,id_Tanya));
List tanyaList=getHibernateTemplate().findByCriteria(标准);
返回tanyaList.get(0);
}
@凌驾
public Tanya getanya(int id_Tanya)抛出异常{
Query Query=getSession().createQuery(“来自Tanya,其中id_Tanya=:id_Tanya”);
setParameter(“id_tanya”,id_tanya);
return(Tanya)query.list().get(0);
}
@凌驾
公共无效保存(Tanya Tanya)引发异常{
getHibernateTemplate().save(tanya);
}
@凌驾
公共无效更新(Tanya Tanya)引发异常{
getHibernateTemplate().update(tanya);
}
@凌驾
public void delete(Tanya Tanya)引发异常{
getHibernateTemplate().delete(tanya);
}
@抑制警告(“未选中”)
@凌驾
public List listAllTanya()引发异常{
DetachedCriteria=DetachedCriteria.forClass(Tanya.class);
List tanyaList=getHibernateTemplate().findByCriteria(标准);
返回tanyaList;
}
这是我的会话配置

<context:component-scan base-package="org.ppbni.splatter" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/db_ppbni" />
    <property name="username" value="root" />
    <property name="password" value="shikamaru" />

    <!-- <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/ppbniorg_db" />
    <property name="username" value="ppbniorg_user" />
    <property name="password" value="shikamaru" /> -->

</bean>
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"></property>
    <property name="dataSource" ref="dataSource"></property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
    <property name="packagesToScan" value="org.ppbni.splatter.model" />
</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager"
    p:sessionFactory-ref="sessionFactory">
</bean>

org.hibernate.dialogue.mysql5dialogue
真的

任何帮助都是很乐意的:D~

我不知道是什么导致了间歇性问题,但有一些事情需要纠正,也许这些改变会纠正行为

有几点:

  • 我的感觉是你应该把
    @Id
    列 一个
    Long
    Integer
    并保持一致

  • 您的impl有一些令人困惑的构造。为什么您同时需要
    get()
    getTanya()

  • 在下面的示例中,我是在注释字段,而不是getter。这似乎是春天的偏好,尽管有

  • 从您提供的代码中,我无法判断您是否包含了
    @Transactional
    。无论如何,您可以将
    标记为只读

  • (旁白)如果不添加任何细节,则不需要指定默认值,如
    FetchType.LAZY
    @Column
    。只包含最简单的代码,这样下一个人就更容易阅读了

  • 除此之外,您还可以查看线的悬挂位置

    通用CRUD接口:

    public interface GenericDao<T> {
    
        T find(Long id);
    
        List<T> findAll();
    
        T update(T t);
    
        T save(T t);
    
        void delete(Long id);
    }
    
    坦尼娅:

    @Entity
    @Table(name = "tanya")
    public class Tanya implements Serializable {
    
        @Id
        @GeneratedValue
        @Column(name = "id_tanya")
        private Long id;
    
        private String isi;
    
        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "no_dana")
        private User user;
    
        @OneToMany(mappedBy = "tanya")
        private Set<Jawab> jawab;
    
        public Long getId() {
    
            return id;
        }
    
        public void setId(Long id) {
    
            this.id = id;
        }
    
        public String getIsi() {
    
            return isi;
        }
    
        public void setIsi(String isi) {
    
            this.isi = isi;
        }
    
        public User getUser() {
    
            return user;
        }
    
        public void setUser(User user) {
    
            this.user = user;
        }
    
        public Set<Jawab> getJawab() {
    
            return jawab;
        }
    
        public void setJawab(Set<Jawab> jawab) {
    
            this.jawab = jawab;
        }
    
    }
    
    @实体
    @表(name=“tanya”)
    公共类Tanya实现了可序列化{
    @身份证
    @生成值
    @列(name=“id\u tanya”)
    私人长id;
    私有字符串isi;
    @多通(级联=级联类型.ALL)
    @JoinColumn(name=“no_dana”)
    私人用户;
    @OneToMany(mappedBy=“tanya”)
    私有集jawab;
    公共长getId(){
    返回id;
    }
    公共无效集合id(长id){
    this.id=id;
    }
    公共字符串getIsi(){
    返回isi;
    }
    公共无效设置isi(字符串isi){
    this.isi=isi;
    }
    公共用户getUser(){
    返回用户;
    }
    公共void setUser(用户){
    this.user=用户;
    }
    公共集getJawab(){
    返回jawab;
    }
    公共无效集合jawab(集合jawab){
    this.jawab=jawab;
    }
    }
    
    这可能是因为以前的会话。成功完成事务后,请使用session.close()方法关闭会话,该方法将释放连接到数据库的实例。由于使用了此方法,问题已得到纠正

    session.close()


    您是否也可以添加如何指定dataSource bean?@alobodzk我已经更新了我的问题,请检查~我已经删除了所有关系,在按输入搜索时仍然面临相同的问题,真的不知道:DD~
    <context:component-scan base-package="org.ppbni.splatter" />
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/db_ppbni" />
        <property name="username" value="root" />
        <property name="password" value="shikamaru" />
    
        <!-- <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/ppbniorg_db" />
        <property name="username" value="ppbniorg_user" />
        <property name="password" value="shikamaru" /> -->
    
    </bean>
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"></property>
        <property name="dataSource" ref="dataSource"></property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
        <property name="packagesToScan" value="org.ppbni.splatter.model" />
    </bean>
    
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager"
        p:sessionFactory-ref="sessionFactory">
    </bean>
    
    public interface GenericDao<T> {
    
        T find(Long id);
    
        List<T> findAll();
    
        T update(T t);
    
        T save(T t);
    
        void delete(Long id);
    }
    
    public interface TanyaDao extends GenericDao<Tanya> {
    
        //add any specific Tanya code
    }
    
    @Repository
    @Transactional
    public class TanyaDaoImpl implements TanyaDao {
    
        @Override
        @Transactional(readOnly = true, timeout = 10)
        public Tanya find(Integer id) {
            return (Tanya) getCurrentSession().get(Tanya.class, id);
        }
    
        @Override
        @Transactional(readOnly = true, timeout = 10)
        public List<Tanya> findAll() {
            Criteria criteria = getCurrentSession().createCriteria(Tanya.class); // this may be different depending on your version of Hibernate
            @SuppressWarnings("unchecked")
            List<Tanya> tanyas = criteria.list();
            return tanyas;
        }
    
        @Override
        public Tanya update(Tanya tanya) {
            try {
                getCurrentSession().update(tanya);
            }
            catch (NonUniqueObjectException ignored) {
                tanya = (Tanya) getCurrentSession().merge(tanya); //you may or may not need to do this part
            }
            return tanya;
        }
    
        @Override
        public Tanya save(Tanya tanya) {
            Serializable id = getCurrentSession().save(tanya);
            return (Tanya) getCurrentSession().get(Tanya.class, id);
        }
    
        @Override
        public void delete(Integer id) {
            Tanya tanya = find(id.intValue());
            getCurrentSession().delete(tanya);
        }
    
        @Autowired
        private SessionFactory sessionFactory;
    
        private Session getCurrentSession() {
            return sessionFactory.getCurrentSession();
        }
    }
    
    @Entity
    @Table(name = "user")
    public class User implements Serializable {
    
        @Id
        @Column(name = "no_dana")
        @GeneratedValue
        private Long id;
    
        @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
        private Set<Tanya> tanya;
    
        @OneToMany(mappedBy = "user")
        private Set<Jawab> jawab;
    
        public Long getId() {
    
            return id;
        }
    
        public void setId(Long id) {
    
            this.id = id;
        }
    
        public Set<Tanya> getTanya() {
    
            return tanya;
        }
    
        public void setTanya(Set<Tanya> tanya) {
    
            this.tanya = tanya;
        }
    
        public Set<Jawab> getJawab() {
    
            return jawab;
        }
    
        public void setJawab(Set<Jawab> jawab) {
    
            this.jawab = jawab;
        }
    }
    
    @Entity
    @Table(name = "jawab")
    public class Jawab implements Serializable {
    
        @Id
        @GeneratedValue
        @Column(name = "id_jawab")
        private Long id;
    
        private String isi;
    
        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "no_dana")
        private User user;
    
        @ManyToOne
        @JoinColumn(name = "id_tanya")
        private Tanya tanya;
    
        public Long getId() {
    
            return id;
        }
    
        public void setId(Long id) {
    
            this.id = id;
        }
    
        public String getIsi() {
    
            return isi;
        }
    
        public void setIsi(String isi) {
    
            this.isi = isi;
        }
    
        public User getUser() {
    
            return user;
        }
    
        public void setUser(User user) {
    
            this.user = user;
        }
    
        public Tanya getTanya() {
    
            return tanya;
        }
    
        public void setTanya(Tanya tanya) {
    
            this.tanya = tanya;
        }
    
    }
    
    @Entity
    @Table(name = "tanya")
    public class Tanya implements Serializable {
    
        @Id
        @GeneratedValue
        @Column(name = "id_tanya")
        private Long id;
    
        private String isi;
    
        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "no_dana")
        private User user;
    
        @OneToMany(mappedBy = "tanya")
        private Set<Jawab> jawab;
    
        public Long getId() {
    
            return id;
        }
    
        public void setId(Long id) {
    
            this.id = id;
        }
    
        public String getIsi() {
    
            return isi;
        }
    
        public void setIsi(String isi) {
    
            this.isi = isi;
        }
    
        public User getUser() {
    
            return user;
        }
    
        public void setUser(User user) {
    
            this.user = user;
        }
    
        public Set<Jawab> getJawab() {
    
            return jawab;
        }
    
        public void setJawab(Set<Jawab> jawab) {
    
            this.jawab = jawab;
        }
    
    }