2016-09-27 3 views
0

Требование состоит в том, чтобы получить записи из базы данных, где определенные столбцы и имя таблицы выбраны во время выполнения.Как я могу получить табличные записи, передающие имена таблиц и имена столбцов во время выполнения в спящем режиме?

Я использую Java, Hibernate и Mysql. Это возможно с помощью JDBC. но я хочу сделать это, используя спящий режим.

Опубликовать намеки, если кто-нибудь знает

Заранее спасибо

+0

пожалуйста, попробуйте сами. SO - для решения проблем, а не для введения в новые поля. Возможно, документация - хорошее место для начала. – loki

ответ

0

Ну, Hibernate может сделать гораздо больше, чем просто JDBC, что вы ищете может быть написано, как это с Hibernate:

Query query = session.createSQLQuery(
"select s.stock_code from stock s where s.stock_code = :stockCode") 
.setParameter("stockCode", "7277"); 
List result = query.list(); 

Как вы можете видеть имя таблицы и столбцы могут быть определенный на лету, это, по крайней мере, наравне с JDBC и, вероятно, даже проще. Вам не нужно использовать параметры, вы можете модульно построить свой запрос в коде, очевидно.

Ссылка для получения более подробной информации https://www.mkyong.com/hibernate/hibernate-native-sql-queries-examples/

+1

Спасибо за ваш ответ ... ваша помощь очень драгоценна –

0

Hibernate имеет больше возможностей, чем JDBC. Лучшей особенностью является Hibernate поддержка Object Oriented Principles. Вы можете использовать Polymorphism, Inheritance, Encapsulation для своих объектов.

У вас должен быть класс BaseEntity, и все остальные классы должны проходить из этого класса.

public class BaseEntity { 

} 

Затем все остальные классы расширяют этот класс. Предположим, что у вас есть еще два класса или сущности.

User.class

import java.io.Serializable; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Table(name = "USERS") 
@Entity 
public class User extends BaseEntity implements Serializable { 

    @Id 
    @Column(name = "ID") 
    private int id; 

    @Column(name = "NAME") 
    private String name; 

    @Column(name = "SURNAME") 
    private String surname; 

    public User() { 
    } 

    public User(int id, String name, String surname) { 
     this.id = id; 
     this.name = name; 
     this.surname = surname; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getSurname() { 
     return surname; 
    } 

    public void setSurname(String surname) { 
     this.surname = surname; 
    } 

} 

Info.class

import java.io.Serializable; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Table(name = "INFO") 
@Entity 
public class Info extends BaseEntity implements Serializable { 

    @Column(name = "TEXT") 
    private String text; 

    @Id 
    @Column(name = "ID") 
    private int id; 

    public Info() { 
    } 

    public Info(String text, int id) { 
     this.text = text; 
     this.id = id; 
    } 

    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     this.text = text; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

} 

Также вы должны добавить mapping тег для каждого класса configuration.hbm.xml Ваш DAO будет выглядеть так.

public List getList(BaseEntity baseEntity, String[] columnNames) { 
    Criteria criteria = session.createCriteria(baseEntity.getClass(), "be"); 
    ProjectionList projectionList = Projections.projectionList(); 
    for (String columnName : columnNames) { 
     projectionList.add(Projections.property("be." + columnName), columnName); // adding column for selection 
    } 
    criteria.setProjection(projectionList); 
    criteria.setResultTransformer(new AliasToBeanResultTransformer(baseEntity.getClass())); // for mapping result to entity 
    return criteria.list(); 
} 

public static void main(String[] args) { 
    String[] columnNames = {"name", "surname"}; // columnNames which you want to select 
    List<Info> users = new GeneralDAO().getList(new User(), columnNames); // you can pass any class User, Info or etc. 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^