Java Hibernate在几个select查询或insert查询后挂起
我正在使用hibernate关系开发spring和hibernate web应用程序,它运行了3次没有问题,从数据库中获取记录没有问题,但在4次应用程序挂起或冻结时,当我重新启动tomcat服务器时,一切正常,在4次尝试时再次挂起或冻结。应用程序挂起或冻结时没有让我感到困惑的错误。当我测试另一个没有在Hibernate上使用关系的类运行良好时,我怀疑是关系,但我不知道~ 这是我的Hibernate关系引用~ 这是我的erd 这是我的用户类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
@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
并保持一致get()
和getTanya()
@Transactional
。无论如何,您可以将标记为只读
FetchType.LAZY
或@Column
。只包含最简单的代码,这样下一个人就更容易阅读了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;
}
}