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).

我希望它有所帮助.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值