从单个表

时间:2016-03-11 06:16:14

标签: java mysql hibernate

我想在hibernate中使用相同的概念,如果它   是可能的,因为我不想写表的每个属性的名称。

   select A.*,B.column from A,B;

2 个答案:

答案 0 :(得分:0)

您不能使用HQL。但是你可以在Hibernate中使用本机SQL查询。然后你可以将A. *强制转换为实体。

SQLQuery sq = session.createSQLQuery("select A.*,B.column from A,B");
sq.addEntity("A", Entity.class);
sq.addScalar("coulmnB", Hibernate.Long);

答案 1 :(得分:0)

您需要定义2个表之间的关系。 比如说你有2个表:作者和书籍。这里的关系是一对一的。

@Table(name="author")
@Entity
public class Author{

    @Id
    @Column(name="id")
    @GeneratedValue
    private long id;

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

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

    @OneToOne    
    @JoinColumn(name="book")
    private Book book;
}

并且Book实体将具有作者的引用,其类似于

@Table(name="book")
@Entity
public class Book{

   @Id
   @Column(name="id")
   @GeneratedValue
   private long id;

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

   @OneToOne
   @JoinColumn(name="author_id", referencedColumnName="id" )
   private Author author;

   @Temporal(TemporalType.DATE)
   @Column(name="published")
   private Date publishedDate;
}

现在设置关系,作者可以从书中访问数据,反之亦然。 如果您想从一个实体获取所有内容而从其他实体获取一些内容,则必须使用标准,投影和变换器,可以解释herehere

您的提取代码将如下所示

Criteria oCriteria = Session.createCriteria(Book.class);
oCriteria.setProjection(Projections.projectionList().add(Projections.property("author").as("oAuthor")).add(Projections.property("title").as("title")));
oCriteria.setResultTransformer(Transformers.aliasToBean(BooksDTO.class));
List<BooksDTO> alBooks = oCriteria.list();

您的BooksDTO对象是包含您的数据的bean。 BooksDTO看起来像

public class BooksDTO{
   private Author oAuthor;

   private String title;

   .... //setters and getters
}