简介:我正在使用Hibernate Tools 4.0.0-CR1和Hibernate 4.2(包括Hibernate
Validator),但是没有使用Bean验证。该模式 是 与部署时正确生成hibernate.hbm2ddl.auto=create- drop
。
但是我更喜欢通过以下build.xml目标生成我的DDL:
<target name="schemaexport" depends="jar" description="Exports a generated schema to DB and files">
<path id="lib.path">
<fileset refid="lib" />
<pathelement location="${jboss.home}/modules/org/apache/xerces/main/xercesImpl-2.9.1-jbossas-1.jar"/>
<pathelement location="${jar.dir}" />
</path>
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="lib.path"/>
<hibernatetool destdir="${basedir}">
<classpath refid="lib.path"/>
<jpaconfiguration persistenceunit="TIC" propertyfile="hibernate-console.properties" />
<hbm2ddl outputfilename="${dist.dir}/db_ddl.sql" format="true"/>
</hibernatetool>
<concat destfile="${dist.dir}/tic.sql" fixlastline="yes">
<filelist dir="${dist.dir}" files="db_ddl.sql" />
<filelist dir="${jar.dir}" files="import.sql" />
</concat>
</target>
我的hibernate-console.properties如下:
hibernate.connection.password=tic
hibernate.connection.username=tic
hibernate.connection.driver_class=org.postgresql.Driver
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.url=jdbc:postgresql://127.0.0.1:5432/db
hibernate.connection.provider_class=org.hibernate.connection.DriverManagerConnectionProvider
hibernate.datasource=
hibernate.transaction.manager_lookup_class=
我仔细检查了jar在我的lib.path中…
示例实体如下所示:
@Entity
public class Title implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Size(max = 50) @NotEmpty @Column(length = 50)
private String titlename;
@Size(max = 50)
private String shortTitle;
}
这里的问题是hbm2ddl为“ titlename”生成了正确的“ varchar(50)”,而为“ shortTitle”生成了通用的“
varchar(255)”。我在@NotNull和基本上其他所有bean验证批注中都遇到了类似的问题。根据手册,这应该可以正常工作[tm]。我究竟做错了什么?
您需要区分验证API和Java持久性API(jpa)(以及供应商特定的持久性api)。Hibernate考虑了JPA配置(和hibernate持久性api),并且当您不提供此类配置时Convention Over Configuration
,该过程就涉及到原理。这就是为什么你varchar(255)
的
@Size(max = 50)
private String shortTitle;
等于(我省略了其他默认值)
@Size(max = 50)
@Column(length = 255, nullable = true)
private String shortTitle;
验证API涉及验证目的。检查字段是否正确填充。同一字段可能存在不同的验证规则。
更新
我的意思是这个http://beanvalidation.org/1.0/spec/#constraintsdefinitionimplementation-
constraintdefinition-
groups
。
对于一组,您验证一个约束,对于另一组,您验证另一个约束。
例如
@NotNull(groups = DefaultGroup.class)
@Null(groups = SecondGroup.class)
private String shortTitle;
然后
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Title>> constraintViolations = validator.validate(title, DefaultGroup.class);
Set<ConstraintViolation<Title>> secondConstraintViolations = validator.validate(title, SecondGroup.class);
我一直在阅读关于Jackson XML反序列化的教程(#1,#2)。我试图通过编写一些java代码来遵循示例: 根据教程,这将产生以下输出: 但是,它会导致以下错误输出: 属性顺序不正确,“id”字段包含不正确的XML元素,“note”字段包含不正确。据说,各种java注释应该会改变Jackson的行为,但似乎所有注释都被忽略了。有人知道这是为什么吗? 这是jackson xml databind
问题内容: 我正在使用以下查询: 令人惊讶的是,该语句不包含错误值为NULL的行。我的意图是仅筛选错误值为连接错误’‘的行。我需要提供其他条件(或错误为NULL)以检索正确的结果。 为什么MYSQL会滤除带有NULL值的结果?我以为IN关键字会返回一个布尔结果(1/0),现在我知道某些MYSQL关键字不返回布尔值,它也可能会返回NULL ....但是为什么将NULL当作特殊值呢? 问题答案: 这个
我想知道是否有可能将一些自定义类型的新约束验证器注册到Bean验证规范定义的注释中。例如,让我们想象一下,我有一个类,它累加了几个int值 我想注册一个自定义约束验证器来支持这种类型的@正向注释(而不是创建自定义注释)。 这样以后我就可以使用这个:
问题内容: 从JavaDoc: 验证此容器及其所有子组件。验证容器意味着布置其子组件。 那就是我想做的。使用尽可能轻巧的组件。但是当我这样做时,对的调用不会使组件“有效”。 为什么我不能做一个有效的? 问题答案: 在文档中说: 当组件在其父容器中的大小和位置正确且其所有子组件也均有效时,该组件才有效。 这种情况,直到你达到顶级容器(,或)。在您所遇到的问题的示例中,您没有父母,所以它永远不会有效。
问题内容: 为什么联接不好或“慢”。我知道我再听一次。我找到了这句话 问题在于联接相对较慢,尤其是在非常大的数据集上,如果联接较慢,则您的网站也很慢。从磁盘上获取所有这些单独的信息位并再次将它们重新组合在一起需要花费很长时间。 来源 我一直以为他们很快,尤其是在查找PK时。他们为什么“慢”? 问题答案: 可伸缩性是关于预计算(缓存),扩展或将重复的工作缩减为基本要件的全部目的,以最大程度地减少
我的Spring Boot MVC REST应用程序有问题。我试图自己解决这个问题几天,但还没有找到解决方案。希望你能帮我:) 我的主应用程序: 我的配置类: TestTableRepository.java: IVectorData: 这里是: 问题是Spring找不到“testTableRepository”Bean。 错误代码: 但有一件有趣的事是,第二个自动连线的候选者“IVectorDa