現在、休止状態をspringと統合しようとしています.Daoデザインパターンとmysqlをデータベースとして使用しています。私はデータベース内のcontacteエンティティを追加しようとしているが、追加されていないとエラーが表示されました。私は連絡先のリストを取得し、IDで取得することができますが、私は更新または挿入できませんでした。休止状態でエンティティを挿入する
これはこれは
package biz.picosoft.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "Contacte")
public class Contacte implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "idContact")
int idContact;
@Column(name = "nom")
String nom;
@Column(name = "mail")
String mail;
@Column(name = "téléphone")
String téléphone;
@Column(name = "adresse")
String adresse;
public Contacte() {
super();
}
public Contacte( String nom, String mail, String téléphone, String adresse) {
super();
this.nom = nom;
this.mail = mail;
this.téléphone = téléphone;
this.adresse = adresse;
}
public long getIdContact() {
return idContact;
}
public void setIdContact(int idContact) {
this.idContact = idContact;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public String getTéléphone() {
return téléphone;
}
public void setTéléphone(String téléphone) {
this.téléphone = téléphone;
}
public String getAdresse() {
return adresse;
}
public void setAdresse(String adresse) {
this.adresse = adresse;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (idContact^(idContact >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Contacte other = (Contacte) obj;
if (idContact != other.idContact)
return false;
return true;
}
}
私contacteDaoImpファイル
package biz.picosoft.daoImpl;
import java.util.List;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;
import biz.picosoft.entity.Contacte;
@Transactional(readOnly=false)
public class ContacteDaoImpl extends GenericDaoImp<Contacte> implements ContacteDao{
}
私の実体ファイルである、これは私のジェネリックDAOのIMPLある
package biz.picosoft.daoImpl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;
import dao.GenericDao;
@Transactional(readOnly=false)
public class GenericDaoImp<T> implements GenericDao<T> {
HibernateTemplate template;
protected Class<T> daoType;
public GenericDaoImp() {
Type t = getClass().getGenericSuperclass();
ParameterizedType pt = (ParameterizedType) t;
daoType = (Class) pt.getActualTypeArguments()[0];
}
public HibernateTemplate getTemplate() {
return template;
}
public void setTemplate(HibernateTemplate template) {
this.template = template;
}
public void insert(T t) {
// TODO Auto-generated method stub
template.save(t);
}
public void update(T t) {
// TODO Auto-generated method stub
template.update(t);
}
public void delete(T t) {
// TODO Auto-generated method stub
template.delete(t);
}
public T findById(Class<T> t, String id) {
// TODO Auto-generated method stub
return template.get(t, id);
}
public List<T> findAll() {
// TODO Auto-generated method stub
return template.loadAll(daoType);
}
}
私のコンテキストファイル
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mailmaneger" />
<property name="username" value="root" />
<property name="password" value="" />
<property name="defaultAutoCommit" value="false" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="mysessionFactory" />
</bean>
<bean id="mysessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="packagesToScan" value="biz.picosoft.entity"/>
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="template" class="org.springframework.orm.hibernate5.HibernateTemplate">
<property name="sessionFactory" ref="mysessionFactory"></property>
<property name="checkWriteOperations" value="false"></property>
</bean>
<bean id="d" class="biz.picosoft.daoImpl.ContacteDaoImpl">
<property name="template" ref="template"></property>
</bean>
</beans>
ですあなたは(偽の読み取り専用=)を削除することができ
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
<!-- This tells Spring to activate annotation-driven transactions -->
<tx:annotation-driven/>
理由:
xmlns:tx="http://www.springframework.org/schema/tx"
とスキーマの場所での:
私のメイン
package biz.picosoft.mains;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import biz.picosoft.daoImpl.ContacteDaoImpl;
import biz.picosoft.entity.Contacte;
public class TestHibernate {
public static void main(String[] args) {
// TODO Auto-generated method stub
Contacte contacte=new Contacte("fatma", "test2", "test", "test");
ApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");
contacte.setIdContact (4);
ContacteDaoImpl contacteDaoImpl=(ContacteDaoImpl) context.getBean("d");
System.out.println(contacteDaoImpl.findAll().size());
contacteDaoImpl.insert(contacte);
}
}
ここで、insert文またはupdate文を呼び出していますか? mainメソッドのコードは、すべての詳細をフェッチしています。Contacteオブジェクトを作成するときに、挿入または更新を呼び出さない場合です。 –
いいえinsertallでfindallを変更すると何も得られません –