我有两列的表格:
@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是否可以这样做?
答案 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)