我想在hibernate中使用相同的概念,如果它 是可能的,因为我不想写表的每个属性的名称。
select A.*,B.column from A,B;
答案 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;
}
现在设置关系,作者可以从书中访问数据,反之亦然。 如果您想从一个实体获取所有内容而从其他实体获取一些内容,则必须使用标准,投影和变换器,可以解释here和here
您的提取代码将如下所示
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
}