之間一對多的關係,我想創建一個User類和消息類之間的一對多關係。用戶可以有多個消息。但是,當我在分貝堅持它,我得到的表格中的空值;創建的數據庫NULL值的用戶和消息
這裏是我的代碼 User.java
@Entity
@Table
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String username;
private String password;
@OneToMany
private List<Message> messages;
public List<Message> getMessages() {
return messages;
}
public void setMessages(List<Message> messages) {
this.messages = messages;
}
public User() {
}
public User(String userName, String password) {
this.username = userName;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
Message.java
@Entity
public class Message {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@ManyToOne
private User sender;
private String receiver;
private String content;
@Type(type="timestamp")
private Date created;
public Message() {
}
public Message(String user, String receiver, String content) {
this.sender = sender;
this.receiver = receiver;
this.content = content;
this.created = new Date();
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User getSender() {
return sender;
}
public void setSender(User sender) {
this.sender = sender;
}
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
MessageDAOImpl.java
public class MessageDAOImpl implements MessageDAO {
public static final Logger LOG = LoggerFactory.getLogger(MessageDAO.class);
private static Session session;
private static void beginSession() {
session = DbUtils.getSessionFactory().openSession();
session.beginTransaction();
}
@Override
public void sendMessage(Message message) {
beginSession();
sendMessage(message, session);
session.close();
}
public void sendMessage(Message message, Session session) {
User user = new User();
List<Message> list = new ArrayList<>();
list.add(message);
user.setMessages(list);
try {
session.save(user);
session.save(message);
session.getTransaction().commit();
} catch (HibernateException e) {
session.getTransaction().rollback();
LOG.error("Cannot save the message", e);
}
}
個
MainClass Solution.java
public class Solution {
public static void main(String[] args) {
// TODO Auto-generated method stub
Message message = new Message("HELP", "HELPER", "PLEASE HELP");
MessageDAOImpl mess = new MessageDAOImpl();
mess.sendMessage(message);
}
}
這是在數據庫中創建空條目。
mysql> select * from user;
+----+--------------------------------------------------------------+-------------+
| id | password | username |
+----+--------------------------------------------------------------+-------------+
| 1 | $2a$10$.wjZcxcnyZV45cUhofl7gG64GYoekSOa | testUser123 |
| 2 | NULL | NULL |
| 3 | NULL | NULL |
+----+--------------------------------------------------------------+-------------+
mysql> select * from Message;
+----+-----------------------------+---------------------+---------------------+-----------+
| id | content | created | receiver | sender_id |
+----+-----------------------------+---------------------+---------------------+-----------+
| 1 | This is good | 2017-05-03 11:17:27 | testReceivedFromCfg | NULL |
| 2 | This challenge is good | 2017-05-03 11:28:25 | testReceivedFromCfg | NULL |
| 3 | PLEASE HELP | 2017-05-03 11:35:22 | HELPER | NULL |
+----+-----------------------------+---------------------+---------------------+-----------+
mysql> select * from user_message;
+---------+-------------+
| User_id | messages_id |
+---------+-------------+
| 2 | 2 |
| 3 | 3 |
+---------+-------------+
我的問題是,用戶可以發送多條消息。如果你直接調用sendMessage
,message
應該發送只有sender
和receier
存在於User table
。但是現在它用NULL值填充數據庫。我如何修改我的代碼?
過程是 1) The user registers with username and password
。 2) Sends message to receiver who is also in the db.
消息可以僅當發送者和接收者是分貝發送。
閱讀有關如何創建雙向一對多關聯的文檔。這不是你在這裏所擁有的。你有兩個單向關聯,每個關聯映射不同(一個使用連接表user_message,一個使用連接列sender_id)。 HTTPS://docs.jboss。組織/休眠/ ORM /電流/ userguide/html_single/Hibernate_User_Guide.html#協會 - 一個一對多雙向。這與閱讀文檔非常簡單。 –
但是,當我在我的'Message構造函數'中傳遞'String sender'時,它將用戶視爲NULL。我該如何解決它? – Newbie
在Message構造函數中根本沒有發送者參數。您需要創建User,然後將創建的用戶傳遞給Message的構造函數。 –