Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Bean验证不起作用。I';m使用JPA2.0和Hibernate3.3_Java_Jpa_Bean Validation - Fatal编程技术网

Java Bean验证不起作用。I';m使用JPA2.0和Hibernate3.3

Java Bean验证不起作用。I';m使用JPA2.0和Hibernate3.3,java,jpa,bean-validation,Java,Jpa,Bean Validation,验证适用于前端(jsf)。然而,它并没有在prepersist上得到验证。我将manufacturer设置为null,并将其存储在数据库中,而不是抛出约束冲突异常。谢谢 以下是我的实体的相关部分: import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.p

验证适用于前端(jsf)。然而,它并没有在prepersist上得到验证。我将manufacturer设置为null,并将其存储在数据库中,而不是抛出约束冲突异常。谢谢

以下是我的实体的相关部分:

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;


/**
 * The persistent class for the CAR database table.
 * 
 */
@Entity
@Table(name="CAR")
public class Car implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="CAR_ID")
    private int carId;

    @Column(name="MANUFACTURER")
    @NotNull(message = "A manufacturer is required.")
    private String manufacturer;
这是我的persistence.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="src_persistence">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>jdbc/BEAN_VALIDATION_DS</jta-data-source>
        <class>
            xxx.beanvalidation.persistence.Car
        </class>
        <validation-mode>CALLBACK</validation-mode>
        <properties>
            <property name="javax.persistence.validation.mode" value="callback"/>
            <property name="openjpa.Optimistic" value="false"/>
            <property name="openjpa.LockManager" value="none"/>
            <property name="openjpa.jdbc.Schema" value="dbo"/>
            <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.CMTTransactionFactory" />
            <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
            <property name="hibernate.current_session_context_class" value="thread" />
            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
        </properties>
    </persistence-unit>
</persistence>

Hibernate 3.3不是JPA2.0实现。JPA2.0需要Hibernate>=3.5.1。 Hibernate3.3中没有集成bean验证API

要将bean验证集成到hibernate 3.3中,您必须实现一个BeanValidationEventListener。以Hibermate实现为例:


您是否尝试过像这样定义列@column(name=“MANUFACTURER”,nullable=false)?可能不会抛出约束冲突,但它应该抛出和异常,您可以捕获和处理它们。@ChadNC确实抛出和异常,但我认为这不是我要寻找的解决方案。例如,我可以使用这种方法在@Size(min=2,max=14)应用此约束吗?您确定事件侦听器会触发吗?您可以尝试将@PrePersist添加到实体中。如果这个方法被调用,我希望Bean验证也会发生。你也尝试过使用“auto”作为验证模式(即使“callback”也可以)。“只是想缩小问题的范围。”哈迪谢谢你的意见。我将尝试这两件事并报告。我是否需要通过设置/注释来启动事件侦听器,还是应该自动启动?我没有使用任何自定义侦听器。
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import com.westfieldgrp.beanvalidation.persistence.Car;
import com.westfieldgrp.beanvalidation.persistence.Driver;
import com.westfieldgrp.beanvalidation.persistence.Person;
import com.westfieldgrp.common.data.dao.DAOInterface;

public class CarDAO  {

    private EntityManager entityManager;


    public void save(Person convertedPerson, Driver convertedDriver, Car convertedCar) {
        EntityManager em = getEntityManager();
        //convertedPerson.setName(convertedPerson.getName()); // To test JPA validation
        Person savedPerson =  em.merge(convertedPerson);
        convertedDriver.setPersonId(savedPerson.getPersonId());
        Driver savedDriver = em.merge(convertedDriver);
        convertedCar.setDriverId(savedDriver.getPersonId());
        if("test".equals(convertedCar.getManufacturer())){
            convertedCar.setManufacturer(null);// To test JPA validation
        }
        em.persist(convertedCar);
        em.flush();
    }

    public EntityManager getEntityManager() {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("src_persistence");
            entityManager = emf.createEntityManager();
        return entityManager;
    }

    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }
}