我有一个与用户对象(user_from 和 user_to)关联的消息对象。我使用 Hibernate(带有 JPA 注释)将 Message 实例持久化到数据库中,并且持久化了 user_id。
User 对象也存储到数据库中,但是在获取消息时,我希望从内存中的 Map 而不是从数据库中获取 User。
原因是因为我有一些暂时性的属性无法持久保存到数据库(Facebook 数据),并且当 Facebook 数据已经加载到内存中时,我不想重新查询 Facebook 以获取数据。
这可能还是应该通过创建 UserType 来完成?哪个类需要定义为 UserType、Message、User 或自定义映射器?如果是自定义映射器,我如何使用 JPA 注释关联映射器(我看过一个使用配置并设置 meta-type="com.example.hibernate.customtype.CustomerTypeMapper" 的示例)?
非常感谢您的帮助!
用户等级:
@Entity(name="com.company.model.user")
@Table(name = "user")
public class User {
private Long id;
private Long fbId;
private String firstName;
private URL picThumbnailUrl;
//...
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getFbId() {
return fbId;
}
public void setFbId(Long fbId) {
this.fbId = fbId;
}
@Transient @FacebookField
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Transient @FacebookField
public URL getPicThumbnailUrl() {
return picThumbnailUrl;
}
public void setPicThumbnailUrl(URL picThumbnailUrl) {
this.picThumbnailUrl = picThumbnailUrl;
}
//....
}
留言类:
@Entity(name="com.company.model.message")
@Table(name = "message")
public class Message {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
@JoinColumn(name="user_id_from")
private User from;
@ManyToOne
@JoinColumn(name="user_id_to")
private User to;
private String text;
//...
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public User getFrom() {
return from;
}
public void setFrom(User from) {
this.from = from;
}
public User getTo() {
return to;
}
public void setTo(User to) {
this.to = to;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
//....
}