2

我正在尝试为两个或多个用户之间的私人消息实现模型。

这意味着我有两个实体:

  • 用户
  • 私人信息

用户模型不应该被编辑,所以我试图建立一个单向关系:

@Entity (name = "User")
@Table (name = "user")
public class User implements Serializable {
@Id
String username;
String password;
// something like this ...
}

PrivateMessage 模型针对多个接收者,并且只有一个发送者。所以我需要这样的东西:

@Entity (name = "PrivateMessage")
@Table (name = "privateMessage")
@XmlRootElement
@XmlType (propOrder = {"id", "sender", "receivers",
        "title", "text", "date", "read"})
public class PrivateMessage implements Serializable {

    private static final long serialVersionUID = -9126766942868177246L;

    @Id
    @GeneratedValue
    private Long id;

    @NotNull
    private String title;

    @NotNull
    private String text;

    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    private Date date;

    @NotNull
    private boolean read;

    @NotNull
    @ElementCollection(fetch = FetchType.EAGER, targetClass = User.class)
    private Set<User> receivers;

    @NotNull
    @OneToOne
    private User sender;

    // and so on
}

不会生成相应的“privateMessage”表,只满足 PM 和许多接收者之间的关系。我对此感到困惑。每次我尝试设置“mappedBy”属性时,我的 IDE 都会将其标记为错误。

用户实体不知道映射它的私人消息似乎是一个问题。

我在这里做错了什么?我已经解决了一些与此类似的情况,但这些解决方案都不会在这里起作用。

提前致谢!

4

1 回答 1

1

我现在知道我的问题的答案:

“read”字段是 MySQL 的保留关键字:http: //dev.mysql.com/doc/refman/5.5/en/reserved-words.html

所以我将字段更改为未读,现在表格已成功生成。

此外,我认为从 PrivateMessage 到用户的正确映射是 @ManyToMany,因为在 PM 中可以有多个用户地址,并且用户可以接收多个 PM。“发件人”字段仍为 @OneToOne。

现在所有表都已成功生成。主要问题是,我使用了保留的 MySQL 关键字并且阻止了表的生成。解决该问题后,很容易找出映射的正确配置。

于 2012-09-07T09:39:17.663 回答