首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何管理一对一和一对多的同类型的单向映射?

如何管理一对一和一对多的同类型的单向映射?
EN

Stack Overflow用户
提问于 2012-09-06 15:37:08
回答 1查看 86关注 0票数 2

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

这意味着我有两个实体

  • 用户
  • PrivateMessage

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

代码语言:javascript
复制
@Entity (name = "User")
@Table (name = "user")
public class User implements Serializable {
@Id
String username;
String password;
// something like this ...
}

PrivateMessage模型为多个接收方提供地址,并且正好有一个发送方。所以我需要这样的东西:

代码语言:javascript
复制
@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都会将其标记为错误。

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

我在这里做错什么了?我已经解决了一些类似的情况,但这些解决方案在这里都行不通。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-07 09:39:17

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

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

因此,我将字段更改为unread,现在该表已成功生成。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12303598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档