Динамически создавать новый экземпляр переменной в Java - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть два класса, которые мне нужны для выполнения одной и той же операции с использованием Hibernate.

@Entity
@Table(name="users")
class User {

    @Id
    public int id;

    String user;
    //etc...
}


@Entity
@Table(name="groups")
class Group {

    @Id
    public int id;

    String group_name;
    //etc...
}

У меня есть класс Hibernate для сохранения данных

public Hibernate {

    public static void save(User user) {
        Session session = ... opne my session
        Transaction tx = session.beginTransaction();

        // save
        session.save(user);

        tx.commit();
        session.close();

    }
}

Теперь я хочу сохранить группуно я хочу использовать ту же функцию, но не могу передать Группу

Я пытался передать

public static void save(Class myClass) {

, но затем я получаю некоторые ошибки. Как я могу динамически передать класс, чтобы он работал?

поэтому мой код будет:

Пользователь user = новый пользователь () .... Hibernate.save (пользователь);// это сохранит пользователя в пользовательской таблице

Group group = new Group () .... Hibernate.save (group);// это сохранит группу в таблице групп

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Разве вам не нужно просто заменить public static void save(User user) на public static void save(Object object)

Sidenote:

Кроме того, если вы не хотите передавать каждый объект для сохранения, тогда вы можете сделатьваши сущности реализуют интерфейс маркера и получают этот интерфейс в формальных аргументах save.

Примерно так:

@Override
public <T extends Base> T find(Class<T> baseClass, Long id) {
    if (baseClass == null || id == null) {
        throw new DaoLevelException("Entity class or id cannot be null");
    }
    // code for finding with id
}

@Override
public void save(Base base) {
    if (base == null) {
        throw new DaoLevelException("object passed for saving cannot be null");
    }
    // code for persist 
}
0 голосов
/ 13 декабря 2018

Во-первых, существуют довольно «стандартные» шаблоны для доступа к базе данных.Например, «DAO» - объект доступа к данным, а также «Хранилище» (в Spring).Но если вы решите вместо этого иметь служебный класс со статическими методами (не рекомендуется), вы можете либо создать второй save() метод, второй будет принимать экземпляры Group (стандартная перегрузка имени метода в Java), либо вымогут иметь классы User и Group, наследуемые от некоторого общего базового класса для ваших сущностей, а затем иметь единственный метод save(), который принимает экземпляры общего базового класса.

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