我们都知道,Spring MVC通常与Hibernate Validator和JSR-303很好地集成.但正如有人所说,Hibernate Validator只适用于Bean Validation,这意味着应该将更复杂的验证推送到数据层.此类验证的示例:业务密钥唯一性,内部记录依赖性(通常指向数据库设计问题,但我们都生活在一个不完美的世界).即使像字符串字段长度这样的简单验证也可能由某个DB值驱动,这使得Hibernate Validator无法使用.
所以我的问题是,Spring或Hibernate或JSR是否提供了执行此类复杂验证的功能?是否有一些已建立的模式或技术部分可以在基于Spring和Hibernate的标准Controller-Service-Repository设置中执行此类验证?
更新:让我更具体一点.例如,有一个表单向控制器的save方法发送AJAX保存请求.如果出现一些验证错误 - 简单或"复杂" - 我们应该回到浏览器,其中一些json指示有问题的字段和相关错误.对于简单错误,我可以从中提取字段(如果有)和错误消息BindingResult.您会针对"复杂"错误提出什么样的基础设施(可能是特定的,而不是临时的例外?)?使用异常处理程序对我来说似乎不是一个好主意,因为在save方法之间分离单个验证过程@ExceptionHandler并使事情变得复杂.目前我使用一些特殊的例外(如,ValidationException):
public @ResponseBody Result save(@Valid Entity entity, BindingResult errors) {
Result r = new Result();
if (errors.hasErrors()) {
r.setStatus(Result.VALIDATION_ERROR);
// ...
} else {
try {
dao.save(entity);
r.setStatus(Result.SUCCESS);
} except (ValidationException e) {
r.setStatus(Result.VALIDATION_ERROR);
r.setText(e.getMessage());
}
}
return r;
}
Run Code Online (Sandbox Code Playgroud)
你能提供更优化的方法吗?
在编写单元测试时,我常常遇到这样的情况equals(),即测试中的某个对象assertEquals应该与在实际环境中的工作方式不同.以某些界面为例ReportConfig.它有id几个其他领域.逻辑上,当一个配置id匹配时,一个配置等于另一个配置.但是,当谈到测试某些特定实现时XmlReportConfig,显然我希望匹配所有字段.一种解决方案不是equals在测试中使用,只是迭代对象属性或字段并进行比较,但它似乎不是一个好的解决方案.
因此,除了这种特定类型的情况之外,我想要理清什么是在语义上而不是在技术上实现平等的最佳实践.
我在Windows XP SP3上使用最新的IPython运行python 2.6,我有两个问题.我的第一个问题是,在IPython下,我无法直接输入Unicode字符串,因此无法打开具有非拉丁名称的文件.让我来证明一下.在通常的python下,这工作:
>>> sys.getdefaultencoding()
'ascii'
>>> sys.getfilesystemencoding()
'mbcs'
>>> fd = open(u'm:/???????/home.tdl')
>>> print u'm:/???????/home.tdl'
m:/???????/home.tdl
>>>
Run Code Online (Sandbox Code Playgroud)
顺便说一下,那里是西里尔文.在IPython下,我得到:
In [49]: sys.getdefaultencoding()
Out[49]: 'ascii'
In [50]: sys.getfilesystemencoding()
Out[50]: 'mbcs'
In [52]: fd = open(u'm:/???????/home.tdl')
---------------------------------------------------------------------------
IOError Traceback (most recent call last)
C:\Documents and Settings\andrey\<ipython console> in <module>()
IOError: [Errno 2] No such file or directory: u'm:/\x81\xab\xae\xaa\xad\xae\xe2/home.tdl'
In [53]: print u'm:/???????/home.tdl'
-------------->print(u'm:/???????/home.tdl')
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error …Run Code Online (Sandbox Code Playgroud) 假设我有一个实体MyEntity,它有一个基于公式的属性fmlaProp.现在说我创建一个标准:
s.createCriteria(MyEntity.class)
.setProjection(
Projections.distinct(
Projections.property("fmlaProp")))
.addOrder(Order.asc("fmlaProp"));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到以下SQL:
SELECT DISTINCT fmlaProp-sql FROM MY_ENTITY_TABLE ORDER BY fmlaProp-sql
Run Code Online (Sandbox Code Playgroud)
这给了Oracle一个错误,说明了order-by表达式是未选中的.然后我尝试了以下标准:
s.createCriteria(MyEntity.class)
.setProjection(
Projections.distinct(
Projections.alias(
Projections.property("fmlaProp"),
"alias1"))
.addOrder(Order.asc("alias1"));
Run Code Online (Sandbox Code Playgroud)
哪个生成"按别名排序1",工作正常.但它有点难看 - 代码必须"知道"那些违反"一次写入"原则的公式属性.对此有何想法或建议?先感谢您.
我是Oracle 10g用户.我不得不写一些SQL查询,并发现了一个神秘的(我看到它)行为.让我们假设我们有一个表,它可以加入某种简单的两级树结构.下一个查询给出了"歧义错误",这是预期的:
select title
from table1
left join table1 on condition
Run Code Online (Sandbox Code Playgroud)
但如果我要在连接中再添加一个表,那么歧义问题就会消失:
select title
from table1
join table2 on other_condition
left join table1 on condition
Run Code Online (Sandbox Code Playgroud)
对此有何解释?我完全想念它......完整的测试用例可以在http://pastebin.com/webf513w找到
这个问题在意义上是重复的,我还是要澄清一下.Oracle文档明确指出可以在CREATE VIEW子句中指定主键(11g docs具有相同的概念).然而,当我尝试这样做时:
create or replace view ABC(A, B, C, CONSTRAINT A_PK PRIMARY KEY (A)) ....
Run Code Online (Sandbox Code Playgroud)
我ORA-00922: missing or invalid option指着"主键"一词.问题是,是Oracle还是Oracle文档存在问题?
我的服务器代码将一些列作为比率值传输,0.0到1.0.我需要格式化并以百分比形式编辑它.我想在JavaScript方面这样做,而无需修改服务器端.因此,如果我添加一个自定义格式化程序,只是将该值乘以100,则显示按预期工作.此外,当我点击编辑按钮时,内联编辑框也会以百分比形式显示值.麻烦在我保存时开始 - 这个值再次用格式化器转换,给我10000个东西.好吧,我需要对称,所以我创建了一个unformatter,它只是将值除以100.但这也不行 - 现在编辑控件将其显示为不是我想要的比例(虽然保存现在可以正常工作).
有没有改变服务器代码的方法?
我有一个Maven项目,镜像设置为centralrepo,就像这样:
<settings>
...
<mirrors>
<mirror>
<id>central-my</id>
<mirrorOf>central</mirrorOf>
<name>Maven Central Repo mirror</name>
<url>http://local_url:15999/nexus/content/repositories/central/</url>
</mirror>
</mirrors>
...
</settings>
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当我导入此项目为IDEA,使其使用settings.xml它仍然没有看到这面镜子,向我展示http://repo.maven.apache.org/maven2,而不是(Project Settings> Maven> Repositories).问题是,我无法从此回购更新,因为我在内部网络上.在这种情况下我该怎么办?
oracle ×3
java ×2
oracle10g ×2
ambiguity ×1
ddl ×1
equality ×1
equals ×1
filesystems ×1
formatter ×1
hibernate ×1
ipython ×1
jqgrid ×1
locale ×1
maven ×1
percentage ×1
python ×1
spring-mvc ×1
sql ×1
validation ×1
windows ×1