У меня есть ситуация.Я создаю проект 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.
Итак, есть ли 1010 * любой способ в 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 {
...