【发布时间】:2018-11-05 07:28:24
【问题描述】:
我有一个情况。我正在创建一个 Spring Boot 项目来与一堆旧版 OpenJPA 实体进行交互。
问题在于,由于 Spring Boot Starter Data JPA 使用 Hibernate 作为基础,Spring 应用程序会抛出 Hibernate 异常,例如:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]
: Invocation of init method failed; nested exception is org.hibernate.AnnotationException:
Using default @DiscriminatorValue for a discriminator of type CHAR is not safe
现在,虽然可以通过更新实体代码轻松解决此问题,但我们无法触摸或更改该代码。我们必须保持原样 - 不符合 Hibernate 标准。
那么,在 Spring 中是否有任何方法来禁用这样的 Hibernate 异常,以便我们可以接受不符合 Hibernate 标准的实体并抛出 Hibernate 异常?
我们的代码设计很简单,是标准的 Service-Repository 设置。例如:
PersonRepository.java:
public interface PersonRepository extends CrudRepository<Person, Long> {
Person findFirstByPersonSsnSsn(String ssn);
Person findFirstByPersonId(Integer personId);
}
PersonDomainService.java:
public interface PersonDomainService {
Person findPersonBySsn(String ssn);
public Person findPerson(Integer id);
}
PersonDomainServiceImpl.java:
@Service
@Transactional
public class PersonDomainServiceImpl implements PersonDomainService {
private PersonRepository personRepository;
@Autowired
public PersonDomainServiceImpl(PersonRepository personRepository) {
this.personRepository = personRepository;
}
@Transactional(readOnly=true)
public Person findPersonBySsn(String ssn) {
Person person = personRepository.findFirstByPersonSsnSsn(ssn);
System.out.println(person.getAddresses().size());
System.out.println(person.getPhones().size());
return person;
}
@Transactional(readOnly=true)
public Person findPerson(Integer id) {
// TODO Auto-generated method stub
Person person = personRepository.findFirstByPersonId(id);
System.out.println(person.getAddresses().size());
System.out.println(person.getPhones().size());
return person;
}
}
而且实体非常标准:
@Entity
@Table(name = "PERSON", schema = "SCHEMA")
public class Person implements Serializable, EntityWithAuditInfo {
...
【问题讨论】:
-
春天有办法做到这一点stackoverflow.com/questions/4172870/…
-
如果您的要求与所述内容不同,请告诉我
标签: java spring hibernate spring-boot openjpa