标签: grails-orm

使用hasmany String查询Grails/GORM条件

我有一个像这样的域对象(Cat):

class Cat {
   String name

   static hasMany = [
      nicknames: String
   ]
}
Run Code Online (Sandbox Code Playgroud)

(猫有一个名字,也有很多绰号(字符串))

而我正在尝试查询所有具有某些昵称的猫.

我试过这个:

PagedResultList getCatsByNickname(String nickname, Map params) {
   PagedResultList results = Cat.createCriteria().list(params) {
      'ilike'('nicknames','%'+nickname+'%')
   }
   return results
}
Run Code Online (Sandbox Code Playgroud)

但它永远不会返回任何结果.(如果我将查询更改为仅使用简单名称属性,它可以找到具有该名称的所有猫,但我想查询昵称.)

我也试过这个:

PagedResultList getCatsByNickname(String nickname, Map params) {
   PagedResultList results = Cat.createCriteria().list(params) {
      'nicknames' {
         'ilike'('nicknames','%'+nickname+'%')
       }
   }
   return results
}
Run Code Online (Sandbox Code Playgroud)

但我收到错误:org.hibernate.MappingException:collection不是关联:example.Cat.nicknames

所以问题是,我如何查询类型为String的hasMany?

grails groovy grails-orm createcriteria

10
推荐指数
2
解决办法
4933
查看次数

Grails多对多属于

我想要多对多的关系.然后我必须在一侧指定belongsTo,如:

static belongsTo = Answer
Run Code Online (Sandbox Code Playgroud)

但是我已经将belongsTo指定为Map:这里是Code

class Answer {

    String text
    static hasMany = [users:User, filters:Filter]
    static belongsTo = [question:Question]
}

class User {
    String name
    static hasMany = [answers:Answer]
    static belongsTo = Answer
}

class Filter {

    String name
    static hasMany = [answers:Answer]
    static belongsTo = [user:User]
    //static belongsTo = Answer
Run Code Online (Sandbox Code Playgroud)

但是我无法在Filter中指定所有者,因为我已经拥有了Filter的用户所有者...

我该怎么做呢?

编辑:对不起我自己想出了解决方案:

class Filter {

    String name
    User user
    static hasMany = [answers:Answer]
    static belongsTo = [User, Answer]
}
Run Code Online (Sandbox Code Playgroud)

grails many-to-many grails-orm belongs-to

10
推荐指数
1
解决办法
2996
查看次数

Grails:未刷新的会话和回滚的事务有什么区别?

我对会话和交易感到困惑.我基本上没有看到两者兼而有之,我很困惑何时使用其中一种.

未刷新的会话和未提交的事务之间有什么区别?

我甚至不知道怎么问我不知道的...是否有一个资源可以提供常见会话和交易情况的良好示例,所以我可以看到差异?

session grails hibernate transactions grails-orm

10
推荐指数
1
解决办法
2177
查看次数

Joda时间DateTime错误地存储在数据库中

我正在使用将JodaTime DateTime字段存储到timestamptzorg.jadira.usertype:usertype.jodatime:1.9.应用服务器有+4时区.数据库服务器+9时区.new DateTime()结果是${currentTime+1hour}+9+9是时区(正确的值是${currentTime+5hours)+9).

我还没有找到任何相关主题.java.util.Date正确存储.

域对象具有以下映射属性:

static mapping = {
    dateCreated sqlType:'timestamptz'
}
Run Code Online (Sandbox Code Playgroud)

如何正确存储DateTime?

grails groovy hibernate grails-orm jodatime

10
推荐指数
3
解决办法
1万
查看次数

如何更改grails中的主键列?

我有一个具有整数变量'code'的域类.我的要求是为该域创建"代码",主键列,并自动增加并从为该doamin.thnks创建的表中删除默认的"id"列

grails grails-orm

10
推荐指数
2
解决办法
1万
查看次数

构建基于Neo4j的应用程序 - 使用普通节点和关系坚持使用vanilla API或使用Spring/GORM?

我希望听到任何一个已经构建并实现了大小合适的Neo4j应用程序(10百万个节点/ rels)的人 - 以及你的建议特别是建模和各种API(vanilla java/groovy Neo4j vs Spring-Data) -Neo4j vs Grails GORM/Neo4j).

我感兴趣的是,它是否真的能够为添加额外的OGM(对象图形映射)层和相关的抽象而付出代价?

有没有人的经验是,最好坚持使用节点+属性,关系+属性,遍历和(例如)Cypher来建模和存储数据的"普通"图形建模?

我担心的是,将特定的OGM抽象"强制"到图形数据库中会影响未来调整/更改域模型的灵活性和/或查询数据的灵活性.

我们是Grails商店,我已经尝试过GORM/Neo4J以及spring-data-neo4j.

数据集的主要目的是建模和查询v.large数量的人,他们的别名,他们的同事以及各种犯罪活动和历史之间的关系.将有超过50个主域名类.模型必须具有灵活性(需要在项目的早期阶段快速发展)以及查询的速度和灵活性.

我必须承认,当我可以使用(例如)POJO或POGO,一点Groovy魔术和一些简单的手动域对象< - >节点/关系映射代码时,我很难找到使用OGM层的令人信服的理由.据我所知,我想我会很高兴只处理节点和遍历和Cypher(又名KISS).但我很乐意听取别人的经验和建议.

谢谢你的时间和想法,

TP

grails grails-orm neo4j spring-data-graph spring-data-neo4j

10
推荐指数
1
解决办法
1787
查看次数

GORM多对多映射,可与其他字段连接

我正在使用遗留数据库,并且与一个连接表有多对多的关联,我已经在很大程度上解决了映射工作正常.但是还有一个列,如果是Book,作者模型可以说nm_author_books包含一个名为'royalty'的字段.问题是如何从任何方向访问此字段?

class Book {
    String title
    static belongsTo = Author
    static hasMany = [authors: Author]
    static mapping = { authors joinTable: [name: "mm_author_books", key: 'mm_book_id' ] } 
}
class Author {
    String name
    static hasMany = [books: Book]
    static mapping = { books joinTable: [name: "mm_author_books", key: 'mm_author_id'] } 
}
Run Code Online (Sandbox Code Playgroud)

如果nm_author_book表具有[nm_book_id,nm_author_id,royalty],访问版税的方式是什么?

grails many-to-many grails-orm jointable

10
推荐指数
2
解决办法
5200
查看次数

以编程方式处理Grails事务

当我需要保存一个对象列表时,每个对象都应该保存在它自己的事务中(这样如果一个失败它们都不会失败),我这样做:

List<Book> books = createSomeBooks()
books.each { book ->
  Book.withNewSession {
    Book.withTransaction {TransactionStatus status ->
      try {
        book.save(failOnError: true)
      } catch (ex) {
        status.setRollbackOnly()
      }
    }
  }
} 
Run Code Online (Sandbox Code Playgroud)

我使用Book.withNewSession是因为如果一本书无法保存并且事务被回滚,则会话将无效,这将阻止后续书籍保存.但是,这种方法存在一些问题:

  1. 这有点冗长
  2. 即使前一本书成功,也将始终为每本书创建一个新会话

有没有更好的办法?我SessionFactory遇到的一种可能性是依赖注入Hibernate 并改为执行此操作

List<Book> books = createSomeBooks()
books.each { book ->
  try {
    Book.withTransaction {
      book.save(failOnError: true)
    }
  } catch (ex) {
    // use the sessionFactory to create a new session, but how....?
  }
}
Run Code Online (Sandbox Code Playgroud)

grails hibernate transactions grails-orm

10
推荐指数
1
解决办法
3206
查看次数

Grails和Hibernate的惰性初始化异常

org.hibernate.LazyInitializationException在Grails中最常见的地方在哪里,原因是什么,你是如何解决的?

我认为这个例外对于新手来说很多,所以如果你提供更多的例子,它会很棒.

grails hibernate grails-orm lazy-initialization

9
推荐指数
1
解决办法
7249
查看次数

ORA-00972:标识符太长 - 在Grails中避免使用它的最佳策略

保存域类对象时,我收到"ORA-00972:标识符太长"错误.

Caused by: org.hibernate.exception.SQLGrammarException: could not initialize a collection: [com.intelligrape.model.Address.studentsForPermanentAddressId#79366215]
Run Code Online (Sandbox Code Playgroud)

除了减少studentsForPermanentAddressId字段的长度之外,可能有什么解决方案可以解决这个问题.原因是,这是一个我无法改变的遗留数据库表.

编辑:添加了Rob Hruska提出的域类描述

package com.intelligrape.model

class Address {

    String address1
    String address2
    String boxNumber
    String city
    Long stateLid
    String province
    String zipCode
    Long countryLid
    Double latitude
    Double longitude
    Long radius

    static hasMany = [studentsForPermanentAddressId: Student, studentsForLocalAddressId: Student]

static constraints = {
        address1 nullable: true
        address2 nullable: true
        boxNumber nullable: true, size: 1..25
        city nullable: true, size: 1..30
        stateLid nullable: true
        province nullable: true, size: 1..64
        zipCode nullable: true, size: 1..15 …
Run Code Online (Sandbox Code Playgroud)

oracle grails hibernate grails-orm

9
推荐指数
1
解决办法
9475
查看次数