Реферат: Я использую Hibernate Tools 4.0.0-CR1 и Hibernate 4.2 (включая Hibernate Validator), но проверки Bean не подбираются. Схема должным образом сгенерирована при развертывании с hibernate.hbm2ddl.auto=create-drop
.Почему создание Hibernate Tools hbm2ddl не учитывает аннотации аннотаций Bean?
Но я предпочитаю, чтобы сформировать свой DDL через следующие цели build.xml:
<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=
Я дважды проверили, что банки в моем 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 генерирует правильный «varchar (50)» для «titlename», но общий «varchar (255)» для «shortTitle». Я столкнулся с аналогичными проблемами с @NotNull и в основном с любой другой аннотацией проверки bean-компонента. Согласно the manual, это должно просто работать [tm]. Что я делаю не так?
Я думаю, что моя говядина с hibernate заключается в том, что она * также * предоставляет реализацию по умолчанию для проверки bean-компонента. Можете ли вы предоставить источник для «разных правил проверки для поля»? Мое рассуждение состояло в том, что если спящий режим знает, что это поле не может содержать более 50 символов, зачем генерировать более широкий? – mabi
Ах, вы говорите, что правила проверки не являются абсолютными, поэтому генератор ddl не может полагаться на них. Не знал этого, хороший момент. – mabi