我试图确定如何有效地找到/检索/加载对象.)最小化对数据库的调用和b.)保持代码尽可能优雅/简单(即不编写hql等).
假设您有两个对象:
public class Foo {
Bar bar
String badge
}
public class Bar {
String name
}
Run Code Online (Sandbox Code Playgroud)
每个Foo都有一个酒吧和徽章.还假设所有徽章在条形图中都是唯一的.因此,如果Foo的徽章为"4565",则没有其他Foos具有相同的徽章#和相同的栏.
如果我有一个酒吧ID,我怎样才能有效地检索Foo而不先选择Bar?
我知道我可以这样做:
Foo.findByBadgeAndBar("4565", Bar.findById("1"))
Run Code Online (Sandbox Code Playgroud)
但这似乎导致Bar表上的select,然后是Foo表上的select.换句话说,我需要生成以下Grails/Hibernate/GORM:
select * from foo where badge="4565" and bar_id="1"
Run Code Online (Sandbox Code Playgroud) 我有一个简单的问题.我一直在努力学习Grails,我设法使用Grails/Gorm 做一个简单的应用程序.
1)后来,我决定使用Mysql而不是Gorm - 我只需要配置'DataSource'并下载驱动程序.
2)所以,如果我想在这两者之间使用hibernate(Grails和MYSQL):http: //www.grails.org/doc/latest/guide/15.%20Grails%20and%20Hibernate.html,我需要制作一个'hibernate.cfg.xml'文件,并指定我的mysql数据库url,user,pw等..我必须映射Grails for MySql列中的每个Class.
那么1)和2)之间的区别是什么?以及hibernate到底做了什么.尽可能举例
PS.如果我说错了,请纠正我,我对此有点新意
我有这样的地图:
['var1':'property1',
'var2':'3']
和这样的一个类:
class MyClass{
MyEnum var1
int var2
String var3
}
enum MyEnum{
PROP1( "property1" )
PROP2( "property2" );
private final String variable;
public MyEnum( String variable ){ this.variable = variable }
public String getVariable(){ return variable }
}
Run Code Online (Sandbox Code Playgroud)
我想只是尝试绑定var1,并var2到一些现有的对象得到验证,但我要如何做到这一点?
有没有比验证器更好的方法来强制执行整数,例如2位数?
在我的幻想世界中,我会做这样的事情:
class FantasyDomainClass{
Integer[2] twoDigitInteger //fantasy world knows I mean base 10
}
Run Code Online (Sandbox Code Playgroud)
也许BigInteger?
基于提出的答案,我在考虑我可能不需要整数,因为'01'是可接受的值.
我有一个包含一组用户域对象的组域对象该组对象可能有200,000个用户.
在测试这个时,我发现用groupModel.delete(flust:true)删除这个组甚至删除组对象groupModel.users.clear()上的所有用户时有200,000个用户非常慢组域对象有级联:为用户设置'all-delete-orphan'
有没有人对如何加速这些删除操作有任何建议
我对以下代码行有一个例外:
def order = new PostOrder(pOrder: "post", posts: status, children: lookupPerson().children)
Run Code Online (Sandbox Code Playgroud)
lookupPerson().children给出了一组具有不同id的2个Child实例
完整的例外是:
org.hibernate.HibernateException: Found shared references to a collection: com.fyp.timeline.PostOrder.children
at com.fyp.timeline.ProfileController$$ENwi3LDE.updateStatus(ProfileController.groovy:134)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
Run Code Online (Sandbox Code Playgroud)
我真的很困惑.主要是因为它曾经常常工作并随机停止.我已经为MySql和一个新数据库添加了一个新用户,但这不应该影响这个.
我对一个奇怪的Grails行为感到疯狂.
我得到一个域类用户:
class User {
String firstName
String token
List roles = [] as List
static constraints = {
}
}
Run Code Online (Sandbox Code Playgroud)
我像这样修改我的BootStrap.groovy来填充5个用户实例:
class BootStrap {
def init = { servletContext ->
switch (Environment.getCurrent()) {
case 'DEVELOPMENT':
def user1 = new User(
id: 1,
firstName: 'Enricot',
token: 'L\'abricot'
)
user1.roles.add('ROLE_USER')
user1.save(failOnError: true)
def user2 = new User(
id: 2,
firstName: 'Arnaud',
token: 'Dauphin')
user2.roles.add('ROLE_USER')
user2.roles.add('PERM_WRITE')
user2.save(failOnError: true)
def user3 = new User(
id: 3,
firstName: 'Magalie',
token: 'La banane')
user3.roles.add('ROLE_USER')
user3.roles.add('PERM_READ') …Run Code Online (Sandbox Code Playgroud) 我想在GORM中创建一个不可变的属性.因此,一旦设置,它就无法更改.例如,产品sku或个人的社会安全号码.建议的方法是什么?
我正在使用Grails应用程序.我正在为我的grails应用程序使用Apache Shiro安全性插件.我试图使用Or和And条件findBy在我的User域类上使用查询,但它给了我一个错误.
我的域类
class ShiroUser {
String firstName
String lastName
String username
String email
String passwordHash
String userStatus
static hasMany = [ roles: ShiroRole, permissions: String ]
static constraints = {
username(nullable: false, blank: false, unique: true)
email(nullable: false, blank: false, email: true,unique: true)
}}
Run Code Online (Sandbox Code Playgroud)
我执行了以下查询:
ShiroUser.findByUsernameOrEmailAndUserStatus(params?.username,params?.username,'Active')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Message: No property found for name [usernameOrEmail] for class [class com.chatportal.ShiroUser]
Run Code Online (Sandbox Code Playgroud)
但是,如果我只用Or条件执行查询,那么它工作正常.
ShiroUser.findByUsernameOrEmail(params?.username,params?.username)
Run Code Online (Sandbox Code Playgroud)
任何人都请帮助我,什么是错我的病情,当我用或者并和条件与findBy?
我在grails映射中有2个实体
产品和资产
我需要获得产品ID等于x且资产类型等于y的资产
我试过了
Asset.findByProductIdAndAssetType(productId, assetType)
Run Code Online (Sandbox Code Playgroud)
但不起作用
独特的解决方案是
按ID加载产品,按产品加载查找
def product = Product.findById(productId)
Asset.findByProductAndAssetType(product, assetType)
Run Code Online (Sandbox Code Playgroud)
有没有办法只使用productId加载资产?
grails ×10
grails-orm ×10
hibernate ×3
validation ×2
digits ×1
grails-2.0 ×1
groovy ×1
hql ×1
integer ×1
mysql ×1
shiro ×1
sql ×1