Спящая сущность отличается реализацией - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть проект с множественной реализацией и классом сущностей 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
    }

}

1 Ответ

0 голосов
/ 30 сентября 2019

Иметь общий абстрактный объект Person и PersonDao, который будет расширен / реализован другими классами (например, MongoPerson, MysqlPersonDao, PersonV2 ... в зависимости от ваших требований). Но используйте только Person и PersonDao в вашем сервисном слое.

Autowire с Spring с использованием квалификаторов и конфигурации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...