使用JPA通过一列连接并返回另一列

时间:2017-08-01 14:49:33

标签: java spring hibernate jpa

我有两列的表格:

@Entity
@Table(name = "documents")
public class Document {
    @Id
    @Column(name = "key")
    public String key;
    @Lob
    @Column(name = "value")
    public byte[] value;
    ....some more data...
}

我有另一个表,有一些字段,我通过键列引用引用了Document表:

@Entity
@Table(name = "table")
public class Table {
     ...some values and id...
     @Nullable
     @ManyToOne(fetch = FetchType.LAZY, targetEntity = Document.class)
     @JoinColumn(name = "some_document_id", referencedColumnName = "key",
             foreignKey = @ForeignKey(name = "document_id_fk"))
     @Convert(converter = ByteArrayToStringConverter.class)
     public String documentValue; //join documents by key column and return value column
}

我想要的是,从此表加入时,不是从所有字段中获取整个Document,而是仅获取一个名为value的列,然后从{{1}转换它} byte[]

我知道我可以从java代码调用getter,但是我很好奇Jpa / Hibernate API是否可以这样做?

1 个答案:

答案 0 :(得分:1)

您可以使用@Query注释在您的存储库中创建一个方法,如下面的代码

@Repository
public interface TableRepository extends JpaRepository<User, Serializable>{

       @Query("select d.value from Table t LEFT JOIN t.documentValue d where d.key=:key")
       byte[] findValue(@Param("key") String key);
}

此方法将返回一个byte []数组,您可以使用它轻松转换为String String s = new String(byteArray)