仅使用getter映射到Hibernate / JPA列(没有实际的类属性)

时间:2018-10-02 15:30:11

标签: hibernate jpa pojo

我有一个要使用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吗?

1 个答案:

答案 0 :(得分:1)

那行不通的...使用这种方法:

  1. 将方法getTime保留为瞬态,但是创建一个带有@Column注释的字段...此字段将映射到将时间存储为连接字符串的列...

  2. 创建一个包方法并用@PrePersist进行注释...我们称其为joinTime ...该方法将在将实体保存到数据库之前由JPA调用,并将设置时间列作为连接字符串...

  3. 创建另一个包方法并用@PostLoad进行注释...我们称其为parseJoinTime ...仅当实体加载到EntityManager中时,JPA才会调用此方法...在这里,您会将您的列值(连接的String)转换为您的时间列表...

仅此而已...

如果您需要有关此方法的更多信息,请查找JPA实体侦听器