@Formula 計算臨時屬性。
相當於可以關聯查詢字段,然后放在實體中當做屬性使用。
任務:在User實體層,增加一個額外的屬性,來獲取Test表中的name字段。
1 表結構
User表
Test表
2 User實體層(省略了部分字段。)
@Entity @Table(name = "user", catalog = "testdb") @DynamicUpdate public class User { private Integer id; private String uuid; private String test; @Id @GeneratedValue @Column(name = "id") public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(name = "uuid") public String getUuid() { return uuid; } public void setUuid(String uuid) { this.uuid = uuid; } @Formula("(select t.name from test as t where t.id=id)") public String getTest() { return test; } public void setTest(String test) { this.test = test; } }
我們可以看到,在getTest上,增加了@Formula注解。查詢表時,就會關聯Test表的name到屬性上。
注意:
首先 表增加別名。
其次 注意sql兩段的小括號()
最后 t.id=id 的最后那個id,對應屬性上的@Colun(value = "id")
3 通過jpa創建一個dao
@Repository public interface UserDao extends JpaRepository<User,Integer> { }
4 測試
@Autowired private UserDao userDao; @Test public void contextLoads() { System.out.println(userDao.findById(2).get().getTest()); }