映射到仅具有 getter 的 Hibernate/JPA 列(没有实际的 class 属性)
Map to Hibernate/JPA column with getter only (no actual class attribute)
我有一个模型,我想使用 JPA 2 保留它,这个模型包含一个字符串列表。在 db 上,我想要一个带分隔符的连接字符串,而不是字符串列表。我是否必须使用包含连接字符串的属性,或者用@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 实际上不是 class 属性而只是一个方法返回的值,这对于 JPA 2 来说是否是一个有效的 POJO?
那行不通...使用这种方法:
将您的方法 getTime 保留为瞬态,但创建一个用 @Column
注释的字段...此字段将映射到将时间存储为连接字符串的列...
创建一个包方法并用@PrePersist
注释...让我们称之为joinTime...这个方法将在将实体保存到数据库之前被JPA调用并将设置时间列的值作为连接字符串...
创建另一个包方法并用@PostLoad
注释...我们称它为parseJoinTime...当实体加载到entityManager中时JPA将调用此方法.. . 在这里你将把你的列值(连接的字符串)转换成你的时间列表...
就这些了...
如果您想了解有关此方法的更多信息,请查找 JPA 实体侦听器
我有一个模型,我想使用 JPA 2 保留它,这个模型包含一个字符串列表。在 db 上,我想要一个带分隔符的连接字符串,而不是字符串列表。我是否必须使用包含连接字符串的属性,或者用@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 实际上不是 class 属性而只是一个方法返回的值,这对于 JPA 2 来说是否是一个有效的 POJO?
那行不通...使用这种方法:
将您的方法 getTime 保留为瞬态,但创建一个用
@Column
注释的字段...此字段将映射到将时间存储为连接字符串的列...创建一个包方法并用
@PrePersist
注释...让我们称之为joinTime...这个方法将在将实体保存到数据库之前被JPA调用并将设置时间列的值作为连接字符串...创建另一个包方法并用
@PostLoad
注释...我们称它为parseJoinTime...当实体加载到entityManager中时JPA将调用此方法.. . 在这里你将把你的列值(连接的字符串)转换成你的时间列表...
就这些了...
如果您想了解有关此方法的更多信息,请查找 JPA 实体侦听器