public class ServiceDAO {
public List<ServicesDTO> getAllServicesByFilter(ServicesFilter filter) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<ServicesDTO> criteria = cb.createQuery(ServicesDTO.class);
Root<ServicesEntity> serviceEntity = criteria.from(ServicesEntity.class);
// here is only one select to get list of services
criteria.select(cb.construct(ServicesDTO.class, serviceEntity.get("active"), serviceEntity.get("providerId"), serviceEntity.get("serviceId")));
// in this case I have multiple selects
//criteria.select(cb.construct(ServicesDTO.class, serviceEntity));
if(filter != null) {
List<Predicate> pcl = new ArrayList<Predicate>();
if(filter.getActive() != null)
pcl.add(cb.equal(serviceEntity.get("active"), filter.getActive()));
if(filter.getProviderId() != null)
pcl.add(cb.equal(serviceEntity.get("providerId"), filter.getProviderId()));
if(filter.getServiceId() != null)
pcl.add(cb.equal(serviceEntity.get("serviceId"), filter.getServiceId()));
criteria.where(pcl.toArray(new Predicate[pcl.size()]));
}
return entityManager.createQuery(criteria).getResultList();
}
}
public class ServicesDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Boolean active;
private Integer providerId;
private Integer serviceId;
public ServicesDTO() {}
public ServicesDTO(Boolean active, String providerId, Integer serviceId) {
this.active = active;
this.providerId = Integer.parseInt(providerId);
this.serviceId = serviceId;
}
public ServicesDTO(ServicesEntity service) {
if(service != null) {
this.active = service.isActive();
this.providerId = Integer.parseInt(service.getProviderId());
this.serviceId = service.getServiceId();
}
// getters & setters
}
-
@Entity
@Table
public class ServicesEntity {
@Id
@Column(name = "id", unique = true)
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column(name = "serviceId", nullable = false)
private int serviceId;
@Column(nullable = false)
private String providerId;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="categoryId")
private Categories categoryId;
private boolean active;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "service", cascade = CascadeType.ALL)
private List<Service_Area_Ref> areas = new ArrayList<Service_Area_Ref>();
@ManyToOne(fetch=FetchType.LAZY, optional = true)
@JoinColumn(name="parentCatId")
private Categories parentCatId;
public ServicesEntity() {}
public ServicesEntity(int serviceId) {
this.serviceId = serviceId;
}
// getters & setters
// equals & hashcode
}
是的,确实如此。可能没有太多的用例。给定
@Entity
public class A {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private Integer value;
public class ADto {
private Integer va;
public ADto(A a) {
this.va = a.getValue();
}
public ADto(Integer va) {
this.va = va;
}
然后
tx.begin();
A a1 = new A();
a1.setValue(1);
A a2 = new A();
a1.setValue(2);
em.persist(a1);
em.persist(a2);
tx.commit();
em.clear();
System.out.println("As usual");
em.createQuery("select new dto.ADto(a.value) from A a where a.value <= 2", ADto.class).getResultList();
System.out.println("As A");
em.createQuery("select new dto.ADto(a) from A a where a.value <= 2", ADto.class).getResultList();
给你
create table A (id integer generated by default as identity (start with 1), value integer, primary key (id))
create table B (id integer generated by default as identity (start with 1), value integer, primary key (id))
insert into A (id, value) values (default, ?)
insert into A (id, value) values (default, ?)
As usual
select a0_.value as col_0_0_ from A a0_ where a0_.value<=2
As A
select a0_.id as col_0_0_ from A a0_ where a0_.value<=2
select a0_.id as id1_0_0_, a0_.value as value2_0_0_ from A a0_ where a0_.id=?
select a0_.id as id1_0_0_, a0_.value as value2_0_0_ from A a0_ where a0_.id=?
我想用本机查询的结果填充数据传输对象类。但我收到以下错误: 这是我的DTO课 这是我的原生查询。这是一个简单的查询: 我使用的是Spring Data JPA,但我知道在hibernate中存在一个方法setResultTransformer,但我在JPA中找不到类似的方法。 在我的例子中,我需要使用本机查询,因为在其他查询中会使用表值函数。
在我的JpaRepository中,我有一个如下的问题 我的dto就像下面一样; 最后,我的TicketStatus枚举是; 当我编译项目时,我得到如下错误;
我编写了以下代码和驱动程序,但我不知道如何使用两个构造函数创建银行账户对象。一个构造函数获取初始余额,第二个构造函数在没有钱的情况下开设账户。此外,Account tBalance是否应该包括有效性检查? 或者,我可以执行以下操作: 将费用作为描述银行账户的一部分。根据需要更新BankAccount类。用户应该能够为每个帐户设置费用金额,并通过一种方法添加费用。向驱动程序添加代码以演示费用功能。(
问题内容: 根据Node.js手册: 如果您希望模块导出的根是一个函数(例如构造函数),或者想一次导出一个完整的对象而不是一次构建一个对象,则将其分配给module.exports而不是export 。 给出的示例是: 并像这样使用: 我的问题:为什么示例不使用正方形作为对象?以下内容是否有效,是否会使示例更加“面向对象”? 问题答案: CommonJS模块允许两种方法来定义导出的属性。无论哪种情
我有一个用Hibernate标准构建的查询(我只向您展示了“主要”部分): 所以我终于可以做: 返回NULL。因此,基本上,由Transformers.AliastoBean创建的实体(通过projection只接收到“ID”)不像由get/load/等加载的普通实体那样工作。 有没有办法让这些dto作为实体“工作”呢?
问题内容: 假设我是关于DTO的新手。我不知道将DTO与JSF,Spring和Hibernate一起使用是否正确。 让我解释一下,到目前为止,我已经在业务层和表示层中使用了直接从数据库创建的实体bean。现在,我决定尝试使用DTO方法,但是我不明白它们如何提供帮助。 例如,如果我有两个类User和Message,而一个用户有更多关联的消息;如何从数据库填充DTO?还是在业务层手动填充DTO?有人可