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

hibernate多对多存储问题

当存储一封信件时,message表中保存了相应的信息,而关联表中没有保存用户与信的关联。


package entity;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

@Entity
public class Message {

private int id;
private String title;
private String count;
private Date time;

private int delState; // 0:未删除 1:已删除

private Set<UserInfo> sendUser = new HashSet<UserInfo>();  // 写信(转发)人
private Set<UserInfo> reUser = new HashSet<UserInfo>();  // 收信人

@Id
@GeneratedValue
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getCount() {
return count;
}

public void setCount(String count) {
this.count = count;
}

public Date getTime() {
return time;
}

public void setTime(Date time) {
this.time = time;
}

public int getDelState() {
return delState;
}

public void setDelState(int delState) {
this.delState = delState;
}

@ManyToMany(mappedBy="sendMsg",cascade=CascadeType.ALL)
public Set<UserInfo> getSendUser() {
return sendUser;
}

public void setSendUser(Set<UserInfo> sendUser) {
this.sendUser = sendUser;
}

@ManyToMany(mappedBy="reMsg",cascade=CascadeType.ALL)
public Set<UserInfo> getReUser() {
return reUser;
}

public void setReUser(Set<UserInfo> reUser) {
this.reUser = reUser;
}

}


package entity;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

@Entity
public class UserInfo {

private int id;
private String name;
private String password;
private Date joinTime;

private Set<Message> sendMsg = new HashSet<Message>();  // 写信
private Set<Message> reMsg = new HashSet<Message>();  // 收信

@Id
@GeneratedValue
public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public Date getJoinTime() {
return joinTime;
}

public void setJoinTime(Date joinTime) {
this.joinTime = joinTime;
}

@ManyToMany
@JoinTable(name="write_msg",joinColumns=@JoinColumn(name="userId"),inverseJoinColumns=@JoinColumn(name="msgId"))
public Set<Message> getSendMsg() {
return sendMsg;
}

public void setSendMsg(Set<Message> sendMsg) {
this.sendMsg = sendMsg;
}

@ManyToMany
@JoinTable(name="receive_msg",joinColumns=@JoinColumn(name="userId"),inverseJoinColumns=@JoinColumn(name="msgId"))
public Set<Message> getReMsg() {
return reMsg;
}

public void setReMsg(Set<Message> reMsg) {
this.reMsg = reMsg;
}

}


package dao.impl;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

import com.opensymphony.xwork2.ActionContext;

import dao.SaveMessageDao;
import entity.Message;
import entity.UserInfo;

public class SaveMessageDaoImpl implements SaveMessageDao {

private SessionFactory sessionFactory = null;
private Session session = null;

public void saveMsg(String title, String count, String userList) {
sessionFactory = new AnnotationConfiguration().configure()
.buildSessionFactory();
session = sessionFactory.getCurrentSession();
session.beginTransaction();

Message m = new Message();
m.setTime(new Date());
m.setTitle(title);
m.setCount(count);
m.setDelState(0);

Set<UserInfo> re = new HashSet<UserInfo>();

String[] userSet = userList.split(" ");
for (int i = 0; i < userSet.length; i++) {
int id=(Integer)session.createQuery("select u.id from UserInfo u where u.name=?").setString(0, userSet[i]).uniqueResult();
UserInfo u=(UserInfo)session.get(UserInfo.class, id);
m.getReUser().add(u);
}

m.getSendUser().add((UserInfo) ActionContext.getContext().getSession().get("u"));

session.save(m);
session.getTransaction().commit();
}

}

Hibernate 存储 多对多 Java --------------------编程问答-------------------- 在一段配置一个inverse=false --------------------编程问答--------------------
引用 1 楼 fangmingshijie 的回复:
在一段配置一个inverse=false


inverse不就是mappedBy吗? 写啦! --------------------编程问答-------------------- 一方关联就行了,干嘛两方都关联。 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 3 楼 fangmingshijie 的回复:
一方关联就行了,干嘛两方都关联。


是一方关联啊,另一边没写mappedBy。 --------------------编程问答-------------------- 解决了!!! --------------------编程问答--------------------  function time(){
                 var dt;
                var date=new Date();
                dt=date.getFullYear()+"/"+date.getMonth()+"/"+date.getDate()+" "
                +(date.getHours()<=9?'0'
                +date.getHours():date.getHours())
                +":"+
                ((date.getMinutes()<=9?'0'
                +date.getMinutes():date.getMinutes()))
                +":"+
                (date.getSeconds()<=9?'0'
                +date.getSeconds():date.getSeconds());
                //document.getElementById("ht").innerHTML=dt;
                    return dt;
               
你还可以在精确毫秒其他的 --------------------编程问答-------------------- 发错了。。。。。。。。。。。。。。。。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,