2017-05-03 6 views
1

Ich versuche, eine Eins-zu-viele-Beziehung zwischen einer Benutzertabelle und einer Nachrichtentabelle mit Hibernate zu erstellen. Ein Benutzer kann mehrere Nachrichten in der Nachrichtendatenbank haben. Aber ich bin nicht in der Lage, das Schema dafür zu bekommen. Hier ist mein CodeEin Benutzer kann mehrere Nachrichten in Mysql-Datenbank haben

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; 
    } 
} 

Das ist mein Schema

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 */; 

Aber leider, ich bin nicht in der Lage, eins zu bekommen zu viele Beziehungen für den Benutzer und Nachrichten. Kann mir bitte jemand helfen? Wie man ein Schema entwirft, um die Eins-zu-viele-Beziehung zu erhalten und wie man die POJO-Klassen ändert, um es zu erreichen?

+0

Wie genau eine Collection von Nachrichten in Ihrem User Entity verwenden sind Sie nicht in der Lage, die Beziehung zu bekommen? Haben Sie irgendwelche Konsolenfehler oder irgendetwas, das uns einen Hinweis geben kann? –

Antwort

1

Sie implementieren die OneToMany Beziehung in die falsche Richtung, Sie sollen

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

Auch bekomme ich nicht, was ist der Punkt des Hinzufügens eines anderen Verweis auf den Benutzer in der 'User' Klasse selbst,' @ManyToOne Benutzer Benutzer; ', ich denke, Sie brauchen es nicht – fujy

0

Versuchen Sie, einen ManyToOne Decorator in die Nachrichtenklasse einzufügen, die auf den Benutzer verweist.

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

und entfernen Sie die @OneToMany von Benutzer

Verwandte Themen