2017-05-03 76 views
1

我正嘗試使用Hibernate在用戶表和消息表之間創建一對多的關係。一個用戶可以在消息數據庫中擁有多條消息。但是,我無法獲得它的模式。 這裏是我的代碼一個用戶可以在mysql數據庫中有多條消息

User.java

@Entity 
@Table 
public class User { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Long id; 

    @ManyToOne 
    User user; 
    @Column(unique = true) 
    private String username; 
    private String password; 

    @OneToMany 
    Message message; 

    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; 
    private String sender; 
    private String receiver; 
    private String content; 

    @Type(type="timestamp") 
    private Date created; 

    public Message() { 

    } 

    public Message(String sender, 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 String getSender() { 
     return sender; 
    } 

    public void setSender(String 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; 
    } 
} 

這是我的架構

CREATE TABLE `Message` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `content` varchar(255) DEFAULT NULL, 
    `created` datetime DEFAULT NULL, 
    `receiver` varchar(255) DEFAULT NULL, 
    `sender` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=latin1; 
/*!40101 SET character_set_client = @saved_cs_client */; 
/*!40101 SET @saved_cs_client  = @@character_set_client */; 
/*!40101 SET character_set_client = utf8 */; 
CREATE TABLE `User` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `password` varchar(255) DEFAULT NULL, 
    `username` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `UK_jreodf78a7pl5qidfh43axdfb` (`username`) 
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1; 
/*!40101 SET character_set_client = @saved_cs_client */; 
/*!40101 SET @saved_cs_client  = @@character_set_client */; 
/*!40101 SET character_set_client = utf8 */; 

但不幸的是,我無法獲得一個到用戶和消息的許多關係。任何人都可以幫助我做到這一點。如何設計一個模式來獲得一對多的關係,以及如何改變POJO類來實現它?

+0

究竟如何是你無法獲得關係?你有任何控制檯錯誤或任何可以給我們提供線索的東西嗎? –

回答

1

您正在實施OneToMany關係走錯了路,你應該使用消息的CollectionUser實體

@OneToMany 
private List<Messages> messages; // Or Set<> 
+0

此外,我沒有得到什麼是在'用戶'類本身'@ManyToOne用戶用戶'添加另一個用戶引用的點,'我猜你不需要它 – fujy

0

嘗試在指向用戶的消息類中放置一個ManyToOne裝飾器。

@ManyToOne 
public User getUser() { return user; } 
public void setUser(User user) { this.user = user; } 
private User user; 

並從用戶的@OneToMany

相關問題