Как сгенерировать идентификатор для разных сущностей дочернего класса, используя jpa и hibernate - PullRequest
0 голосов
/ 11 мая 2018

У меня есть следующая сущность суперкласса AbstractCompany:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class AbstractCompany {
@Id
    @GenericGenerator(name = "rju_id", strategy = "com.ivc.talonsystem.util.keygens.RjuIdGenerator")
    @GeneratedValue(generator = "rju_id")  
    @Column(name = "id")
    private Integer id;
// other properties and getters-setters for them
}

и детский класс Рю:

@Entity
@Table(name="rju")
public class Rju extends AbstractCompany implements Serializable {
    @NotEmpty
    @Column(name = "fullname")
    private String namerju;
    @NotEmpty
    @Column(name = "briefname")
    private String briefname;
    // other properties and getters-setters for them
}

и класс RjuIdGenerator для генерации идентификатора для сущности Rju:

public class RjuIdGenerator implements IdentifierGenerator {

    @Override
    public Serializable generate(SessionImplementor session, Object object) throws HibernateException {
        Connection connection = session.connection();
        try {
            Statement statement=connection.createStatement();

            ResultSet rs=statement.executeQuery("select max(id) as Id from Rju");

            if(rs.next())
            {
                int id=rs.getInt(1)+1;
                Integer generatedId = new Integer(id);
                return generatedId;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

}

этот класс RjuIdGenerator генерирует id для всех супер и дочерних классов. Как я могу добавить еще один генератор классов для конкретных дочерних объектов? Заранее спасибо !!!

1 Ответ

0 голосов
/ 11 мая 2018

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

public class RjuIdGenerator implements IdentifierGenerator {

    @Override
    public Serializable generate(SessionImplementor session, Object object) throws HibernateException {
        Connection connection = session.connection();
        try {
            Statement statement=connection.createStatement();
            if (object.getClass().getName()==Rju.class.getName()) {
                ResultSet rs=statement.executeQuery("select max(id) as Id from Rju");

                if(rs.next())
                {
                    int id=rs.getInt(1)+1;
                    Integer generatedId = new Integer(id);
                    return generatedId;
                }
            } else {
                ResultSet rs=statement.executeQuery("select max(id) as Id from AbstractCompany");

                if(rs.next())
                {
                    int id=rs.getInt(1)+100000;
                    Integer generatedId = new Integer(id);
                    return generatedId;
                }
            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

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