2016-08-09 2 views
1

Я работаю над весенним и спящим веб-приложением, используя Hibernate Relationship, и он работает без проблем 3 раза и берет записи из базы данных без проблем, но в 4 раза приложение зависает или зависает , когда я перезапускаю сервер tomcat, все в порядке и зависает или снова замораживается в 4 раза. нет ошибки, когда приложение зависает или зависает, что делает меня настолько запутанным. и когда я проверить еще один класс, который не используя отношения на Hibernate работает хорошо, мой подозреваемый отношения, но я понятия не имею, ~Hibernate зависает после нескольких запросов на выбор или вставляет запросы

это моя Hibernate Отношения Ссылка ~

mkyong

viralpatel

это мой ERD,

enter image description here

это мой класс пользователей,

@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; 
} 
} 

это мой класс таня,

@SuppressWarnings("serial") 
@Entity 
@Table(name="tanya") 
public class Tanya implements Serializable{ 

private int id_tanya; 
private String isi; 

@Id 
@Column(name="id_tanya", unique=true, nullable=false) 
public int getId_tanya() { 
    return id_tanya; 
} 
public void setId_tanya(int id_tanya) { 
    this.id_tanya = id_tanya; 
} 
@Column(name="isi") 
public String getIsi() { 
    return isi; 
} 
public void setIsi(String isi) { 
    this.isi = isi; 
} 
private User user; 

@ManyToOne(cascade=CascadeType.ALL) 
@JoinColumn(name="no_dana") 
public User getUser() { 
    return user; 
} 
public void setUser(User user) { 
    this.user = user; 
} 

private Set<Jawab> jawab; 

@OneToMany(fetch = FetchType.LAZY, mappedBy="tanya") 
public Set<Jawab> getJawab() { 
    return jawab; 
} 
public void setJawab(Set<Jawab> jawab) { 
    this.jawab = jawab; 
} 
} 

это мой класс jawab,

@SuppressWarnings("serial") 
@Entity 
@Table(name="jawab") 
public class Jawab implements Serializable{ 

private int id_jawab; 
private String isi; 

@Id 
@Column(name="id_jawab", unique=true, nullable=false) 
public int getId_jawab() { 
    return id_jawab; 
} 
public void setId_jawab(int id_jawab) { 
    this.id_jawab = id_jawab; 
} 
@Column(name="isi") 
public String getIsi() { 
    return isi; 
} 
public void setIsi(String isi) { 
    this.isi = isi; 
} 

private User user; 

@ManyToOne(cascade=CascadeType.ALL) 
@JoinColumn(name="no_dana") 
public User getUser() { 
    return user; 
} 
public void setUser(User user) { 
    this.user = user; 
} 

private Tanya tanya; 

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name="id_tanya") 
public Tanya getTanya() { 
    return tanya; 
} 
public void setTanya(Tanya tanya) { 
    this.tanya = tanya; 
} 
} 

и это образец моего дао (от Tanya класс),

@Autowired 
private TanyaDaoImpl(SessionFactory sessionFactory){ 
    setSessionFactory(sessionFactory); 
} 

@SuppressWarnings("unchecked") 
@Override 
public Tanya get(int id_tanya)throws Exception{ 
    DetachedCriteria criteria = DetachedCriteria.forClass(Tanya.class).add(Restrictions.eq("id_tanya", id_tanya)); 
    List<Tanya> tanyaList = getHibernateTemplate().findByCriteria(criteria); 
    return tanyaList.get(0); 
} 

@Override 
public Tanya getTanya(int id_tanya)throws Exception{ 
    Query query = getSession().createQuery("from Tanya where id_tanya = :id_tanya"); 
    query.setParameter("id_tanya", id_tanya); 
    return (Tanya) query.list().get(0); 
} 

@Override 
public void save(Tanya tanya)throws Exception{ 
    getHibernateTemplate().save(tanya); 
} 

@Override 
public void update(Tanya tanya)throws Exception{ 
    getHibernateTemplate().update(tanya); 
} 

@Override 
public void delete(Tanya tanya)throws Exception{ 
    getHibernateTemplate().delete(tanya); 
} 

@SuppressWarnings("unchecked") 
@Override 
public List<Tanya> listAllTanya()throws Exception{ 
    DetachedCriteria criteria = DetachedCriteria.forClass(Tanya.class); 
    List<Tanya> tanyaList = getHibernateTemplate().findByCriteria(criteria); 
    return 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> 

любая помощь будет приятно: D ~

+0

Не могли бы вы добавить, как вы определяете DATASOURCE боб? – alobodzk

+0

@alobodzk Я уже обновил свой вопрос, пожалуйста, проверьте его ~ –

ответ

0

Я не легко увидеть, что будет вызывать прерывистый вопрос, но есть несколько вещей, которые могли бы использовать коррекцию и, возможно, изменения будут исправлять поведение.

Некоторые моменты:

  1. У меня такое ощущение, что вы должны сделать @Id столбец либо Long или Integer и быть последовательными.

  2. У вашего impl есть некоторые запутывающие конструкции. Зачем вам нужны как get(), так и getTanya()?

  3. В моих примерах, приведенных ниже, я аннотирую поля, а не геттеры. Кажется, это предпочтение Spring, хотя есть varying opinions.

  4. Из вашего предоставленного кода я не могу сказать, включили ли вы @Transactional. Несмотря на это, вы можете пометить readOnly.

  5. (кроме того) Вам не нужно указывать значения по умолчанию, например FetchType.LAZY или @Column, если вы не добавили никаких подробностей. Используйте только минимальный минимальный код, и это облегчает чтение следующего человека.

Кроме этого, вы также dump a stack trace и может видеть, где нить висит.

Общий интерфейс CRUD:

public interface GenericDao<T> { 

    T find(Long id); 

    List<T> findAll(); 

    T update(T t); 

    T save(T t); 

    void delete(Long id); 
} 

TanyaDAO:

public interface TanyaDao extends GenericDao<Tanya> { 

    //add any specific Tanya code 
} 

TanyaDAOImpl:

@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; 
    } 
} 

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; 
    } 

} 
+0

Я уже удаляю все мои отношения и по-прежнему сталкиваюсь с той же проблемой при поиске по исходным данным, на самом деле понятия не имею: DD ~ –

Смежные вопросы