thebesghost
2009-08-02 17:06 阅读 215
已采纳

使用hibernate开发相册时,相册与照片的一对多问题!

大家好!

我在做一个相册,每个相册中可能有n张照片。目前相册与照片也配置成了双向一对多的关系。但我一直担心会出性能问题。
因为我发现好像用hibernate JPA的配置里面,无法将一的一端设为“inverse”。所以如果添加相片,必须这样:
photo.setAlbum(album);
album.getPhotos().put(photo);
albumManager.save(album);
这样每添加一张照片,就要获取一遍该相册中的所有相片!
有没有更好的办法?
比如将相片和相册设置成多对一?
或者干脆不配置关联,直接用程序逻辑控制关联?(我以前都是这么做的,但现在发现ORM的精髓就是关联,不配置关联实在可惜)
或者用大缓存解决这种问题?(总感觉不太合适,而且我们现在没有钱购买很贵的机器,如果非要这样的话,我觉得hibernate在这一点设计的也太烂了吧?)

刚还看了下面这篇帖子,跟我问的问题差不多,但几乎没有人能给予一个很肯定并且很有说服的答复。
http://www.iteye.com/topic/59707?page=1

恳请各位热心的大侠给予答复,谢谢!
[b]问题补充:[/b]
p.s. 我的配置如下:

@Entity
@Table(name="alb_album")
public class Album implements Serializable {
private Set photos = new HashSet();

@OneToMany(cascade=CascadeType.ALL,mappedBy="album",fetch=FetchType.LAZY)
public Set<Photo> getPhotos() {
    return photos;
}
public void setPhotos(Set<Photo> photos) {
    this.photos = photos;
}

}

@Entity
@Table(name="alb_photo")
public class Photo implements Serializable{

private Album album;

@ManyToOne(cascade = { CascadeType.MERGE, CascadeType.REFRESH })
@JoinColumn(name="album_id")
public Album getAlbum() {
    return album;
}

public void setAlbum(Album album) {
    this.album = album;
}

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    web_killer web_killer 2009-08-02 22:54

    你看一下后台发没发出SQL语句不就可以了吗

    点赞 评论 复制链接分享
  • web_killer web_killer 2009-08-02 17:26

    “每添加一张照片,就要获取一遍该相册中的所有相片”? 你把Hibernate中一的一方在代码中用List不就行了吗? 通过调用add方法,这样就在末尾添加了,为什要获取一遍呢?

    点赞 评论 复制链接分享
  • linux105 linux105 2009-08-02 22:08

    照片的cascade=“save-update”不行吗?

    点赞 评论 复制链接分享

相关推荐