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;
}
}
Hibernate 存储 多对多 Java --------------------编程问答-------------------- 在一段配置一个inverse=false --------------------编程问答--------------------
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();
}
}
inverse不就是mappedBy吗? 写啦! --------------------编程问答-------------------- 一方关联就行了,干嘛两方都关联。 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
是一方关联啊,另一边没写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 开发