天天看點

mysql test 映射到實體_将MySql視圖映射到JPA Entitites,使用哪個唯一...

我不認為有一種标準方式,但這種方法似乎值得嘗試.

想法是為視圖動态生成唯一的“id”值(類似于rownum).來自Create a view with column num_rows – MySQL的功能的一點修改版本(為了重置rownum而進行的修改):

delimiter //

CREATE FUNCTION `func_inc_var_session`( val int) RETURNS int

NO SQL

NOT DETERMINISTIC

begin

if val = 0 THEN set @var := -1; end if;

SET @var := IFNULL(@var,0) + 1;

return @var;

end

//

假設我們有一個視圖定義(為簡化說明而過于簡化)

CREATE VIEW v_test1

SELECT a.field1

FROM test_table a

将其修改為

CREATE VIEW v_test1

SELECT a.field1, func_inc_var_session(0) as rownum

FROM test_table a

會做的;但是,在一個會話中多次運作select * from v_test将為您提供連續的rownums,例如第一次以1開頭,第二次以視圖中的記錄數等開始.

要重置rownum,我建立另一個視圖(因為mysql視圖限制 – 它不能在FROM中有子查詢):

CREATE VIEW v_reset AS SELECT func_inc_var_session(1);

現在我們可以做到

CREATE VIEW v_test1

SELECT a.field1, func_inc_var_session(0) as rownum

FROM test_table a, v_reset

(首先處理FROM子句,func_inc_var_session(1)将在查詢期間執行一次,是以它将重置rownum).

我希望它有所幫助.