当前位置:编程学习 > JAVA >>

SSH多对一时生成的SQL语句里出现update email set userId=null

两个实体类,一个用户user,一个email;
用户————email:一对多
email—————用户:多对一


代码
AddForm addForm=(AddForm)form;
int userId=Integer.parseInt(request.getParameter("userId"));
User user=new User();
user.setUserId(userId);
user.setuName(addForm.getUname());
user.setAge(addForm.getAge());
user.setGender(addForm.getSex());


emaild.deleteAllEmailById(userId);

for(int i=0;i<addForm.getEmail().length;i++)
{
Email email=new Email();
email.setEmailAccount(addForm.getEmail()[i]);
email.setUser(user);
System.out.println(email.getUser().getUserId());
emaild.save(email);
}
userd.update(user);

return mapping.findForward("success");




这是一个要实现修改该用户邮箱的action,想法是删除该用户之前的所有邮箱,把修改之后页面的邮箱添加给该用户;
结果
System.out.println(email.getUser().getUserId());
emaild.save(email);

到这里的时候打印user的id能出现,save时产生的sql代码是这样的:
Hibernate: update email set userId=null where userId=?

怎么会是null???? --------------------编程问答-------------------- 一晚上了,还这样啊 --------------------编程问答-------------------- <class name="com.iti.pojo.User" table="userInfo">
<id name="userId">
<column name="userId"></column>
<generator class="sequence">
<param name="sequence">userid</param>
</generator>
</id>
<property name="uName">
<column name="uName"></column>
</property>
<property name="age">
<column name="age"></column>
</property>
<property name="gender">
<column name="gender"></column>
</property>
<set name="emails" table="email" cascade="all" lazy="false">
<key column="userId"></key>
<one-to-many class="com.iti.pojo.Email" />
</set>
</class>





<class name="com.iti.pojo.Email" table="email">
<id name="emailId">
<column name="emailId"></column>
<generator class="sequence">
<param name="sequence">emailid</param>
</generator>
</id>
<property name="emailAccount">
<column name="emailAccount"></column>
</property>
<many-to-one name="user" cascade="all" lazy="false">
<column name="userId"></column>
</many-to-one>
</class> --------------------编程问答-------------------- 你这里的userId有值吗?
user.setUserId(userId);
你把前面的userId打印出来看看 --------------------编程问答-------------------- 楼主。看不到你与数据库交互的代码。把DAO层贴一下吧。 --------------------编程问答-------------------- 额……回三楼,userId是有值的,从前一个页面表单提交上的,打印有值 --------------------编程问答--------------------
commonDao
        public Object findById(Class entityClass,Integer id)
{
return getHibernateTemplate().get(entityClass, id);
}

public void save(Object obj)
{
getHibernateTemplate().save(obj);
}

public void update(Object obj)
{
getHibernateTemplate().update(obj);
}

public void delete(Object obj)
{
getHibernateTemplate().delete(obj);
}

public List<Object> findByHql(String hql)
{
return getHibernateTemplate().find(hql);
}

public Session openSession()
{
return getSessionFactory().openSession();
}
--------------------编程问答--------------------
userDao
        public class UserDao extends CommonDao implements IUserDao
        {
private Session session;
private Query query;


public void deleteUserAndEmailById(int Id)
{
User user=(User)findById(User.class, Id);
delete(user);
}

public List<User> findAllUserByPage(int page, int pagesize)
{
List<User> list=null;
session=openSession();
if(session!=null)
{
Query query=session.createQuery("from User");
query.setFirstResult(pagesize*(page-1));
query.setMaxResults(pagesize);
list=query.list();
}
return list;
}

public int findAllUserNumber()
{
int num=0;
session=openSession();
if(session!=null)
{
Query query=session.createQuery("select count(*) from User");
num=Integer.parseInt(query.uniqueResult()+"");
}
return num;
}

public User findUserById(int Id)
{
User user=null;
session=openSession();
if(session!=null)
{
Query query=session.createQuery("from User where userId=:Id");
query.setInteger("Id", Id);
user=(User)query.list().get(0);
}
return user;
}

public void save(User user)
{
super.save(user);
}

public void update(User user)
{
super.update(user);
}

}

emailDao
        public class EmailDao extends CommonDao implements IEmailDao
        {
private Session session;
private Query query;


public void deleteAllEmailById(int Id)
{

session=openSession();
if(session!=null)
{
Query query=session.createQuery("delete from Email where user.userId=?");
query.setInteger(0, Id);
query.executeUpdate();
}
}

public List<Email> findAllEmailByPage(int page, int pagesize)
{
List<Email> list=null;
session=openSession();
if(session!=null)
{
Query query=session.createQuery("from Email");
query.setFirstResult(pagesize*(page-1));
query.setMaxResults(pagesize);
list=query.list();
}
return list;
}

public int findEmailNumber()
{
int num=0;
session=openSession();
if(session!=null)
{
Query query=session.createQuery("select count(*) from Email");
num=Integer.parseInt(query.uniqueResult()+"");
}
return num;
}

public void save(Email email)
{

super.save(email);
}

}
--------------------编程问答-------------------- </many-to-one>
</class>
你到配制文件中改成多对一就可呀, --------------------编程问答-------------------- cascade="all" 改成 cascade="none"
补充:Java ,  Web 开发
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,