我有一个要使用JPA 2持久保存的模型,该模型包含一个字符串列表。在数据库上,而不是字符串列表,我想使用分隔符连接字符串。我必须使用包含连接字符串的属性还是用@Column装饰的方法“ getJoindString”足够?
这是一个示例:
@Entity
@Table(name = "times")
public class TimesList {
private transient List<String> times;
@Transient
public List<String> getTimes() {
if (times == null) {
times = new ArrayList<String>();
}
return times;
}
@Column(name = "joinedTimes")
public String getJoinedTimes() {
return String.join("|", getTimes());
}
public void setJoinedTimes(String joinedTimes) {
times = Arrays.asList(joinedTimes.split("|"));
}
}
即使joinedTimes实际上不是类属性,而是方法返回的值,这对于JPA 2还是有效的POJO吗?
答案 0 :(得分:1)
那行不通的...使用这种方法:
将方法getTime保留为瞬态,但是创建一个带有@Column
注释的字段...此字段将映射到将时间存储为连接字符串的列...
创建一个包方法并用@PrePersist
进行注释...我们称其为joinTime ...该方法将在将实体保存到数据库之前由JPA调用,并将设置时间列作为连接字符串...
创建另一个包方法并用@PostLoad
进行注释...我们称其为parseJoinTime ...仅当实体加载到EntityManager中时,JPA才会调用此方法...在这里,您会将您的列值(连接的String)转换为您的时间列表...
仅此而已...
如果您需要有关此方法的更多信息,请查找JPA实体侦听器