【问题标题】:how to join 2 table on Hibernate in grails?如何在 grails 中加入 2 个 Hibernate 表?
【发布时间】:2020-12-25 19:32:57
【问题描述】:

我需要帮助。我想问一下 grails 上的 Hibernate HQL。我想将 2 个表加入 1 个结果中。

我的控制器

TRANSACTION.executeQuery("from TRANSACTION join SUBSCRIBER on TRANSACTION.subscriberID = SUBSCRIBER.msisdn where TRANSACTION.date = '2020-09-04'"

结果:意外令牌:开启

当我更改与此源相同的代码时 This link

TRANSACTION .executeQuery("from TRANSACTION t1,SUBSCRIBER t2 where t1.subscriberID = t2.msisdn and TRANSACTION.date = '2020-09-04'")

结果:“字段列表”中的未知列“subscriber0_.pos”

我的数据库映射

class Transaction implements Validateable{
String id
String subscriberID
String currentBalance 
String date

static mapping = {
    datasource 'trx'
    table 'TRANSACTION'
    id generator: 'assigned', column: "ID"
    subscriberID column: "subscriberID"  <-- this value is equals to msisdn at Subscriber
    currentBalance column: "currentBalance"
    date column: "date" 
    version false
}

class Subscriber implements Validateable{

String id   
String msisdn
String firstName

static mapping = {
    datasource 'subs'
    table 'SUBSCRIBER'
    
    id column:"subscriberID"        
    msisdn column:"msisdn"      
    firstName column:"firstName"

    version false
    
}

我想像这样加入他们

|名字 |订阅者ID |当前余额 |日期 |

【问题讨论】:

  • 在查询中添加前导 select * 并重试
  • @MarmiteBomber 我得到了这样的结果:org.springframework.orm.hibernate3.HibernateQueryException:意外令牌:* 在第 1 行第 8 列附近 [select * from com.dm.voucher.Transaction where date = '2020-09-04'];
  • 抱歉,HQL 查询显然不需要 explicite ON 连接子句 - 请参阅 documentation 中的示例
  • hai @MarmiteBomber 我刚刚阅读了内部连接,我将我的代码放入了这个 def query=“from Transaction trx, Subscriber subs” query= query+“inner join subs.msisdn where “query = query +” Transaction.subscriberID = '0'" query= Transaction.executeQuery(query);我得到了这个:org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法将带有类'java.lang.String'的对象''转换为类'java.util.ArrayList'

标签: hibernate grails groovy hql


【解决方案1】:

我解决了!

def query = "select table1.subscriberID,table2.msisdn from table1 t1, table2 t2 where t1.id = t2.id" 查询= table1.executeQuery(查询);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-11
    • 2012-09-20
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多