(20251208)tsk_在 Play 2.3.10 升級後為檢視 Bean 補上 Ebean 主鍵的紀錄
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1296
chore: add Ebean ids for view beans on 2.3.10
近期把「統計資料検索システム (TSK)」從 Play 2.1.5 移到 Play 2.3.10。升級後,Ebean 在啟動時對 @Entity 的要求更嚴格:凡被掃描進 ebean.default="models.*" 的類別,都必須有 @Id。原本幾個「檢視/報表用 Bean」沒有主鍵,結果在新路徑 C:\Program Files\play-2.3.10\play-2.3.10 直接啟動就炸,錯誤訊息如下:
Configuration error Cannot register class [models.RREP004Bean] in Ebean server
變更重點
- 為下列檔案新增 @Id(並補齊 import),讓 Ebean 能註冊:
- application/tsk/app/models/RREP002Bean.java
- application/tsk/app/models/RREP003Bean.java
- application/tsk/app/models/RREP004Bean.java
- application/tsk/app/models/ViewCountOfToday.java(以 userCount 為主鍵)
- application/tsk/app/models/ViewDailyLendingLogCount.java(以 day 為主鍵)
- 這些 Bean 多數來源是 SQL/檢視並非真實表,沒有天然主鍵,因此為 RREP002/003/004Bean 加上虛擬的 Long id 欄位;兩個檢視類別則用現有欄位當作主鍵。
- 順帶移除 UTF-8 BOM(EF BB BF),避免 Javac 在 2.3.10 toolchain 下報 illegal character: 65279。
為什麼一定要 @Id?
Ebean 3.x(Play 2.3.10 內建)在啟動時會掃描 ebean.default 指定的 package,若看到 @Entity 卻沒有 @Id,就直接拒絕註冊並中斷啟動。因此即便是只讀的檢視/報表 Bean,也要給一個唯一鍵(或虛擬鍵)讓 ORM 介面可以識別。
BOM 問題
原檔案含 UTF-8 BOM(開頭三個位元組 EF BB BF)。Javac 會把這視為非法字元(65279),造成「illegal character: 65279」。改存成 UTF-8(無 BOM)即可。
驗證
- application\tsk\sbtw.bat clean compile 在 C:\Program Files\play-2.3.10\play-2.3.10 路徑下已編譯通過,Ebean 不再報「Cannot register class」。
後續提醒
- 若之後新增任何 @Entity(即便是檢視或報表用 Bean),記得一開始就定義 @Id。
- 保持檔案為 UTF-8 (no BOM),避免再次遇到 65279 的編譯錯誤。
- 若搬遷路徑或重建環境,確保 application/tsk/app/models 下的這些檔案仍是無 BOM 的 UTF-8。
This article was last edited at