正如问题标题所说,我试图制作一个投影标准,只查询几个表属性.
所以我有一个Person Table /类,它有大约40个属性.我希望我的标准获得动态数量的属性,比如10,11或12(SQL术语select firstname, lastname from person),我这样做:
Transaction tx = session.beginTransaction();
Criteria crit = session.createCriteria(Person.class);
crit.setCacheable(true);
ProjectionList projList = Projections.projectionList();
projList.add(Projections.property("id"));
Criterias c = null;
for (int i = 0; i < checked.size(); i++) {
Attribute attr = checked.elementAt(i);
switch (attr) {
case LASTNAME:
projList.add(Projections.property("lastName"));
c = enumMap.get(attr);
if (c.isChanged()) {
String tmp = (String) c.getAnswer();
tmp = tmp.replace('*', '%');
crit.add(Restrictions.like("lastName", tmp));
crit.addOrder(Order.asc("lastName"));
}
case ...THE REST .....
}
crit.setProjection(projList);
retList = crit.list();
tx.commit();
return retList;
Run Code Online (Sandbox Code Playgroud)
并且它返回 …
在我们的系统中,我们的数据库如下所示
一个代理商有很多经纪人,一个经纪人有很多用户,一个用户有很多订单.
我正在尝试使用hibernate标准来查找指定经纪商下的所有用户订单.在简单的SQL中,这将非常容易.我可以在条件api中执行此操作吗?我发现在使用点击和过滤器类型时,条件api工作得特别好,因为您可以构建一个非有序的限制列表并将它们添加到条件中.
目前我有这个不起作用
final Session session = (Session) entityManager.getDelegate();
final Brokerage brokerage = userAdmin.loadBrokerage(brokerageId);
@SuppressWarnings({"UnnecessaryLocalVariable", "unchecked"})
final List<UserOrder> userOrders = session
.createCriteria(UserOrder.class)
.add(Restrictions.eq("user.brokerage", brokerage))
.list();
Run Code Online (Sandbox Code Playgroud)
我收到消息"由以下原因引起:org.hibernate.QueryException:无法解析属性:user.brokerage:com.printlogix.rp.server.domain.UserOrder:".
你能将param名称传递给Restrictions.eq,如"object.parentobject.property"吗?
我有这个Grails的2.0.3项目,其中有两个型号DomainA和DomainB无一不是由相互关联的many-to-many关系,其中DomainB的一个孩子DomainA.
class DomainA {
// properties
static hasMany = [domains: DomainB]
}
class DomainB {
// properties
static hasMany = [domains: DomainA]
static belongsTo = [DomainA]
}
Run Code Online (Sandbox Code Playgroud)
鉴于这种设计,我想查询所有DomainB其中存在DomainA以下查询集的实例DomainA.
def domainsList = DomainA.createCriteria().list() {
// other criterions for the other properties
}
DomainB.createCriteria().list() {
inList("domains", domainsList)
// other criterions for the other properties
}
Run Code Online (Sandbox Code Playgroud)
执行上面的代码时,会出现错误提示,ERROR util.JDBCExceptionReporter - Parameter #1 has not been …
我有一对多关系所有者 - >狗.
我将通过ID查询狗以及以EAGER方式引入所有者我使用Hibernate 4.1.6设置此代码而不使用XML映射.我只需要来自DOG和OWNER的一些字段使用Projections Hibernate生成的SQL是完美的,但是我的对象没有填充,因为DOG返回填充的字段但是返回的所有者是 DOG.OWNER==NULL我到目前为止使用的代码...我的entities.other代码省略简洁
@Entity
public class Owner implements Serializable
{
Set<Dog>dogs=new HashSet<Dogs>(0);
@OneToMany(fetch=FetchType.LAZY, mappedBy="owner")
public Set<Dogs> getDogs(){return this.dogs}
}
@Entity
public class Dog implements Serializable
{
private Owner owner;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ownerid")
public Owner getOwner(){return this.owner;}
}
Run Code Online (Sandbox Code Playgroud)
这是我的方法.
public Dog getDogAndOwnerById(Integer dogId)
{
Projection p=Projections.projectionList()
.add(Projections.property("d.id"),"id")
.add(Projections.property("o.id"),"id");//and others fields
Session session = getHibernateTemplate().getSessionFactory().openSession();
Criteria like = session.createCriteria(Dog.class,"d")
.add(Restrictions.idEq(dogId)).setProjection(p)
.setResultTransformer(Transformers.aliasToBean(Dog.class))
.setFetchMode("owner",FetchMode.JOIN).createAlias("owner","o");
Dog dog = (Dog)like.uniqueResult();
//Object[]obj=(Object[])like.uniqueResult(); for(Object id:obj)System.out.println(id);
//System.out.println(obj.length);
session.close();
return dog;
//dog is OK …Run Code Online (Sandbox Code Playgroud) java hibernate projection resulttransformer hibernate-criteria
我对Criteria API有一些经验,但我之前从未使用过QueryDsl.我想问的是使用QueryDsl而不是Criteria API有什么优点/缺点?特别是我想知道哪一个更适合大型数据库(我的意思是复杂的查询).
我有两张桌子:Tax和TaxRule.两个表中都有一列相同,即TAX_RULE_ID.但是没有像OneToOne或那样的任何Hibernate映射OneToMany.这两张表看起来像 -
税
@Id
@Column(name = "TAX_RATE_ID")
private Long taxRateId;
@Column(name = "TAX_RULE_ID")
private Long taxRuleId;
@Column(name = "TAX_TYPE")
private String taxType;
Run Code Online (Sandbox Code Playgroud)
TAX_RULE
@Id
@Column(name = "TAX_RULE_ID")
private Long taxRuleId;
@Column(name = "TAX_CD")
private String TaxCode;
@Column(name = "STATE")
private String state;
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取密钥的数据,即TAX_RULE_ID.此列在两个表中都很常见.我有以下Hibernate代码,我在TAX_RULE_ID列中加入两个表,如下所示:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<String[]> cQuery = criteriaBuilder.createQuery(String[].class);
Root<Tax> taxRoot = cQuery.from(Tax.class);
cQuery.multiselect(taxRateRoot.get("taxType"), taxRateRoot.get("taxRate"));
List<Predicate> predicates = new ArrayList<>();
Join<Tax, TaxRule> …Run Code Online (Sandbox Code Playgroud) 我正在使用 Hibernate,我知道你可以使用 HQL 来防止 SQL 注入:
String query1 = "from Obj where id = "+ id;
String query2 = "from Obj where id = :id";
Run Code Online (Sandbox Code Playgroud)
query1是不安全的,query2也是安全的。
如何使用 Criteria 实现安全查询?这是否已经实施了还是我必须做其他事情?
Criteria c = session.createCriteria(Obj.class);
c.add(Restrictions.eq("id", 5));
Run Code Online (Sandbox Code Playgroud) 你能帮我解决这个问题吗?我正在尝试按日期对条件查询的结果进行排序,但没有得到我需要的结果。我以字符串格式保存日期,如何使用条件按日期排序
我正在使用的代码是:
@Override
public List<Program> getListProgram() {
Session session=sessionFactory.openSession();
Criteria criteria=session.createCriteria(Program.class);
criteria.addOrder(Order.asc("createdDate"));
List<Program> programs=(List<Program>)criteria.list();
return programs;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
01/02/2009
03/01/2009
04/06/2009
05/03/2009
06/12/2008
07/02/2009
Run Code Online (Sandbox Code Playgroud)
结果应该是:
06/12/2008
03/01/2009
01/02/2009
07/02/2009
Run Code Online (Sandbox Code Playgroud)
我需要以上述格式选择日期。
非常感谢您的帮助。
使用 SQL 我可以将数据从一个表复制到另一个镜像表。(例如insert into TABLE_EXAMPLE_COPY select * from TABLE_EXAMPLE;。如何使用 Hibernateorg.hibernate.Criteria或org.hibernate.Queryor做同样的事情org.hibernate.SQLQuery?
总结一下,我有 3 个实体,主要的一个是名为“Rac”的实体。它包含一个“RacNatureza”列表,其中包含一个属性“Natureza”。
拉克
@Entity
@Table(name = "rac")
public class Rac {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idRac;
@OneToMany(mappedBy = "rac", cascade = {CascadeType.ALL}, orphanRemoval = true)
@JsonManagedReference //para evitar recursão infinita do JSON
private List<RacNatureza> racNaturezas;
//...getters and setters ok
}
Run Code Online (Sandbox Code Playgroud)
RacNatureza
@Entity
@Table(name = "rac_natureza")
public class RacNatureza implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_rac_natureza")
private Long idRacNatureza;
@ManyToOne
@JsonBackReference //coloquei para evitar a recursao infinita de JSON
@JoinColumn(name="id_rac")
private Rac rac;
@ManyToOne
@JoinColumn(name="id_natureza") …Run Code Online (Sandbox Code Playgroud) hibernate ×9
java ×6
jpa ×3
criteria ×2
grails ×1
oracle ×1
predicate ×1
projection ×1
querydsl ×1
restrictions ×1