【问题标题】:Check that specific sequence exists or not in hibernate检查特定序列是否存在于休眠中
【发布时间】:2017-03-31 10:15:10
【问题描述】:

我想运行这样的查询 -

"SELECT nextval('sequenceName')"

但在此之前,我想检查 sequenceName 在 Hibernate 中是否存在。

【问题讨论】:

    标签: java postgresql hibernate


    【解决方案1】:

    这里的答案给了我一个想法Check if sequence exists in Postgres (plpgsql), 我不知道这是否是一个完美的解决方案,但你可以使用:

    SELECT COUNT(*) 
    FROM information_schema.sequences 
    WHERE sequence_schema='sch_name' AND sequence_name='sequence_name'
    

    这会给你 0(如果不存在)或 1(如果存在)。

    所以要解决你的问题,你必须分两次执行你的查询,一个是检查你的序列是否存在,第二个是选择你的序列,所以你的代码应该是这样的:

    String sch_name = "sch_test";
    String sequence_name = "sequence_name";
    
    //Check if your sequence exist or not
    Query q = createNativeQuery("SELECT COUNT(*) FROM        
                                 information_schema.sequences 
                                 WHERE sequence_schema='" + sch_name + "' 
                                 AND sequence_name='" + sequence_name + "'");
    
    int i = (Integer) q.getSingleResult();
    int sequence = 0;
    
    //if the sequence exit it will return 1
    if(i == 1){
      //increment your sequence and return the result
      q = createNativeQuery("SELECT nextval('" + sequence_name + "')");
      sequence = (Integer) q.getSingleResult();
    }else{
       //sequence not exist
    }
    

    【讨论】:

    • 如果序列不存在,第二个查询依然会报错:rextester.com/ESJW42101
    • 哎呀这是正确的@a_horse_with_no_name 我会尽力解决它谢谢
    • @a_horse_with_no_name 我真的无法找到我已经使用CASE WHEN 的解决方案,但这并不能解决问题,我认为更好的解决方案是使用代码没有?
    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 2011-01-06
    • 1970-01-01
    • 2011-07-17
    • 2022-06-14
    • 1970-01-01
    • 2016-01-03
    • 2012-06-28
    相关资源
    最近更新 更多