小编Ant*_*ric的帖子

如何克服Hibernate Criteria和Example API的限制?

我的公司拥有高度可配置的数据库搜索服务,对于以编程方式配置查询非常有用.Criteria API功能强大,但当我们的某个开发人员重构其中一个数据对象时,标准限制并不表示它们在我们运行单元测试之前就已被破坏,或者更糟糕的是,它们是在我们的生产环境中运行的.最近,由于这个问题,我们的重构项目在工作时间上意外地翻了一倍,项目规划存在差距,如果我们知道实际需要多长时间,我们可能会采取另一种方法.

我想使用Example API来解决这个问题.如果我们在实际POJO属性上指定"where"条件,Java编译器可以大声地指示我们的查询是不可靠的.但是,Example API中只有这么多功能,并且它在很多方面都有限制.以下面的例子为例

 Product product = new Product();
 product.setName("P%");
 Example prdExample = Example.create(product);
 prdExample.excludeProperty("price");
 prdExample.enableLike();
 prdExample.ignoreCase();
Run Code Online (Sandbox Code Playgroud)

在这里,正在查询属性"name"(其中名称如'P%'),如果我要删除或重命名字段"name",我们会立即知道.但物业"价格"怎么样?它被排除,因为Product对象有一些默认值,所以我们将"price"属性名称传递给排除过滤器.现在,如果"价格"被删除,这个查询将在语法上无效,直到运行时才会知道.瘸.

另一个问题 - 如果我们添加第二个where子句会怎么样:

 product.setPromo("Discounts up to 10%");
Run Code Online (Sandbox Code Playgroud)

由于对enableLike()的调用,此示例将匹配促销文本"折扣高达10%",还有"折扣高达10,000,000美元"或其他任何匹配的内容.通常,Example对象的查询范围的修改(例如enableLike()或ignoreCase()并不总是适用于要检查的每个属性.

这是第三个也是主要的问题 - 其他特殊标准呢?使用标准示例框架无法使每个产品的价格超过10美元.没有办法通过促销,降序来订购结果.如果Product对象在某个Manufacturer上加入,则无法在相关的Manufacturer对象上添加标准.没有办法在制造商的标准上安全地指定FetchMode(尽管这通常是Criteria API的问题 - 无效的获取关系无声地失败,甚至更多的是定时炸弹)

对于上述所有示例,您需要返回Criteria API并使用属性的字符串表示来进行查询 - 再次消除了Example查询的最大好处.

Example API有哪些替代方案可以获得我们需要的那种编译时建议?

java hibernate upgrade hibernate-criteria

6
推荐指数
1
解决办法
2818
查看次数

:是否包含ActiveRecord实例的工作?

以下所有示例:包括for eager loading用于类级别查询.我在我的模型实例上尝试了它,它仍然发出了一堆查询 - 它是否适用于实例方法?

 #in controller
 @emails = person.sent_emails(:include => [:recipient])

 #in view
 render @emails

 # _email.html.erb partial
 <h1><%= email.recipient.name %></h1>
 <p>
 <%= email.content %>
 </p>

 #still issues a select * for emails, N+1 for recipients :/
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails eager-loading

6
推荐指数
1
解决办法
1352
查看次数

E_STRICT做什么?

我真的很想确保我们的代码库没有错误,这些错误会被PHP的内置错误检查所警告,但我想确切地看到E_STRICT强制执行的操作.通过扩展,什么是PHP的"严格标准"?我看了,但找不到一份全面的清单.

我从经验中得知的一些严格的标准:

  • 警告静态调用非静态方法
  • 警告不兼容的子类函数签名
  • 警告不要通过引用分配值

我所知道的关于E_STRICT的是它警告可能会破坏兼容性的代码,但我不确定具体是什么意思.

有没有关于此信息的好资源?

php error-handling

6
推荐指数
1
解决办法
873
查看次数

将delete-orphan与where条件相结合

Hibernate映射问题,其中行为是模糊的和/或危险的.我有一对多关系,具有级联删除孤立条件和where条件限制集合中的项目.这里映射 -

<hibernate-mapping>
 <class name="User" table="user" > 

  <!-- properties and id ... -->

   <set table="email" inverse="true" cascade="all,delete-orphan" where="deleted!=true">
      <key column="user_id">
      <one-to-many class="Email"/>
   </set>

 </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

现在假设我有一个与一个或多个Email对象关联的User对象,其中至少有一个对于deleted属性具有'true'值.当我在User对象上调用session.delete()时,会发生以下哪两个?

  1. 将删除用户和所有电子邮件对象,包括已删除= true的对象
  2. 将删除用户和已删除的电子邮件对象!= null.

一方面,方案1)忽略where条件,根据域模型可能不正确.但是在方案2)中,如果父项被删除,并且子(email)表的连接键上存在外键约束,则delete命令将失败.哪个发生了,为什么?这只是Hibernate功能如何模糊的另一个例子吗?

java orm hibernate data-mapping

5
推荐指数
1
解决办法
877
查看次数

php函数'重载'有什么作用?

根据PHP文档:

overload()函数将为class_name标识的类启用属性和方法调用重载.

http://www.php.net/manual/en/function.overload.php

但那究竟是什么意思呢?这是否意味着我可以在该类上进行适当的重载(比如Java的重载)?

php methods

5
推荐指数
1
解决办法
81
查看次数

Golang:你能将包包装在接口中吗?

我正在编写一个简单的库来协助常见的断言。

type Test interface {
    Fatalf(string, ...interface{})
}

func IsTrue(statement bool, message string, test Test) {
    if !statement {
       test.Fatalf(message)
    }
}
Run Code Online (Sandbox Code Playgroud)

我注意到该log包实际上有一个兼容的实现,如果可以相应地调用Fatalf(string, ...interface{})该方法那就太好了:IsTrue

IsTrue(false, "false wasn't true", log)
Run Code Online (Sandbox Code Playgroud)

但我得到了错误use of package log not in selector。有没有什么方法可以使用或包装一个包来使该模式发挥作用,或者这是不可能的?

duck-typing go

4
推荐指数
1
解决办法
3798
查看次数

最简洁的方法来测试零时间.时间

我有一个结构可能没有设置time.Time值在其中一个字段上.在测试nullity时,我不能使用nil或0. time.Unix(0,0)也不一样.我想出了这个:

var emptyTime time.Time
if thing.time == emptyTime {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但我想要一个解决方案,为我节省一个行/临时变量

time go

0
推荐指数
1
解决办法
131
查看次数