Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate注释:两个实体之间的两种关系类型?_Java_Mysql_Hibernate_Orm_Annotations - Fatal编程技术网

Java Hibernate注释:两个实体之间的两种关系类型?

Java Hibernate注释:两个实体之间的两种关系类型?,java,mysql,hibernate,orm,annotations,Java,Mysql,Hibernate,Orm,Annotations,我的场景是一个用户表和一个图片表。每个用户可以上传多张图片。每个用户都可以将自己的一张图片设置为自己最喜欢的图片,但这并不影响该图片位于该用户的图片集合中 事实证明,将其映射到hibernate是困难的。我的应用程序有一个屏幕,显示用户所有图片的列表,并显示他们最喜欢的图片。但是,当应用程序加载图片时,最喜欢的图片不会加载。eclipse中的调试为列表中的特定对象显示了各种有趣的事情,可能它是一个代理对象。以下是显示映射的实体代码: @Entity class Account { @Id

我的场景是一个用户表和一个图片表。每个用户可以上传多张图片。每个用户都可以将自己的一张图片设置为自己最喜欢的图片,但这并不影响该图片位于该用户的图片集合中

事实证明,将其映射到hibernate是困难的。我的应用程序有一个屏幕,显示用户所有图片的列表,并显示他们最喜欢的图片。但是,当应用程序加载图片时,最喜欢的图片不会加载。eclipse中的调试为列表中的特定对象显示了各种有趣的事情,可能它是一个代理对象。以下是显示映射的实体代码:

@Entity
class Account {
    @Id
    public String username;

    /* Originally a Set<Picture>, but wanted ordering */
    @OneToMany(cascade=CascadeType.ALL, mappedBy="account")
    @OrderBy("uploadtime DESC")
    public List<Picture> pictures;

    @ManyToOne(fetch = FetchType.LAZY, optional=true)
    @LazyToOne(LazyToOneOption.PROXY)
    @JoinColumn(name="favourite_picture_id")
    public Picture favourite_picture;

    /* Sometimes it is useful to get just the id, if possible without loading the entire entity */
    @OneToOne(fetch = FetchType.LAZY, optional=true)
    @Column(insertable=false, updatable=false)
    public String favourite_picture_id;
}

@Entity
public class Picture {
    @Id
    @GeneratedValue(generator="uuid")
    @GenericGenerator(name="uuid", strategy="uuid2")
    public String id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="username")
    public Account account;

    /* This is never used, but I thought this might be required for the mapping? */
    @OneToOne(mappedBy="favourite_picture")
    public Account account_favourite_picture;


    public String mimetype;

    public Date uploadtime = new Date();

    @Column(length=1024 * 1024 * 4)
    public byte[] data;
}
@实体
类别帐户{
@身份证
公共字符串用户名;
/*原本是一套,但需要订购*/
@OneToMany(cascade=CascadeType.ALL,mappedBy=“account”)
@OrderBy(“上传时间描述”)
公开图片列表;
@ManyToOne(fetch=FetchType.LAZY,可选=true)
@LazyToOne(LazyToOneOption.PROXY)
@JoinColumn(name=“收藏夹图片\u id”)
公共图片;
/*有时,如果可能的话,只获取id而不加载整个实体是很有用的*/
@OneToOne(fetch=FetchType.LAZY,可选=true)
@列(可插入=false,可更新=false)
公共字符串收藏夹图片id;
}
@实体
公开课图片{
@身份证
@GeneratedValue(generator=“uuid”)
@GenericGenerator(name=“uuid”,strategy=“uuid2”)
公共字符串id;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“username”)
公共帐户;
/*这是从未使用过的,但我认为这可能是映射所必需的*/
@OneTONE(mappedBy=“喜爱的图片”)
公众帐户最喜爱的图片;
公共字符串mimetype;
公共日期上载时间=新日期();
@列(长度=1024*1024*4)
公共字节[]数据;
}

我不知道为什么最喜欢的图片无法加载到图片列表中。如果您有任何建议,我们将不胜感激:D

因为
图片
有一个特定的
帐户
拥有它,我很想在图片类中包含一个名为
isfavorite
的布尔属性。这将大大简化映射


您可以在Account类上提供一个
getFavorite
方法,该方法通过查看图片列表并找到标记为Favorite的图片来返回最喜爱的图片。

这是一种解决问题的有趣方法。我使用列表映射是因为我希望每个帐户都有少量图片,所以这可能是可以接受的。完美主义不会妨碍一个功能系统的建立。你也激发了另一个想法,我可以在Account实体中有一个字符串来存储喜爱图片的ID,我可以在Account中实现一个getFavorite()方法,该方法遍历列表以查找匹配图片。除非很快有更好的帖子,否则我可能会这么做。谢谢你的建议,没问题。如果可能的话,我希望避免使用复杂映射。我总是喜欢更简单的方法!简单真的是最好的,现在所有的工作与更简单的映射。