У меня есть проект с множественной реализацией и классом сущностей Person. В каждой реализации есть разные базы данных, разные таблицы и разные столбцы. На уровне DAO и бизнес-уровне код один и тот же. Как я могу изменить только постоянный уровень, чтобы иметь различную реализацию класса сущностей Person на основе профиля и оставить неизменным остальную часть кода?
//I would like to change table and columns based on a profile
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Integer id;
private String first_name;
private String last_name
//getters,setters
}
//I would like to keep DAO unchanged no matter the profile
public interface PersonDao {
public List<Person> listAll() throws Exception;
}
public class PersonDaoImpl implements PersonDao{
@Override
public List<Person> listAll() throws Exception{
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Person> criteria = criteriaBuilder.createQuery(Person.class);
Root<Person> root = criteria.from(Person.class);
...the rest of the code
}
}