冬眠5.2.12.1决赛
我想用CriteriaBuilder替换depreracted session.createCriteria(参见org.hibernate.Criteria),我有以下异常
在此ManagedType[com…DonneReference]上找不到具有给定名称[filtre]的属性
上:
其中(builder.equal(root.get(“filter”),filter));
@Repository
public class ReferenceDaoImpl implements ReferenceDao {
@Autowired
private SessionFactory sessionFactory;
...
private static final String REQUEST_ALL_VERSIONS = "select tableref from " + DonneeReference.class.getName() + " tableref "
+ "where tableref.table = ? and tableref.dateAnnulation = null";
private static final String REQUETE_RECHERCHE_LOCALITE = "select loc from " + Localite.class.getName() + " loc "
+ "where loc.codeInsee = ? AND loc.codePostal = ? ";
private static final String REQUETE_RECHERCHE_LOCALITES_COMMUNE = "select loc from " + Localite.class.getName() + " loc where loc.codeInsee = ?";
...
// Constructeurs
public ReferenceDaoImpl() {
}
@Override
public DonneeReference rechercherDonneeUnique(String identab, String critere, String filtre, Date dateEffet) {
DonneeReference donneeReference = null;
Session session = sessionFactory.getCurrentSession();
// Sample try
CriteriaBuilder builder = sessionFactory.getCriteriaBuilder();
CriteriaQuery<DonneeReference> criteria = builder.createQuery(DonneeReference.class);
Root<DonneeReference> root = criteria.from(DonneeReference.class);
criteria.select(root);
criteria.where(builder.equal(root.get("filtre"), filtre));
List<DonneeReference> results = session.createQuery(criteria).getResultList();
return results.get(0);
}
}
CriteriaBuilder似乎只适用于实体,而不适用于旧的hbm映射文件。
<class name="ReferenceLog" table="REF_REFPARAM_LOG">
<id name="id" column="id">
<generator class="increment"/>
</id>
<property name="tableMaj" not-null="true"/>
<property name="code" not-null="true"/>
<property name="userMaj" not-null="true"/>
<property name="message" not-null="true"/>
<property name="dateMaj" not-null="true"/>
</class>
<class name="DonneeReference" table="REF_REFPARAM">
<composite-id>
<key-property name="table" column="CT0_IDENTAB"/>
<key-property name="code" column="CT0_CRIT1"/>
<key-property name="filtre" column="CT0_CRIT2"/>
<key-property name="version" column="CT0_NOVERS"/>
</composite-id>
<property name="zone3" column="CT0_ZONX3"/>
<property name="libelle" column="CT0_ZONX2"/>
<property name="libelleCourt" column="CT0_ZONX1"/>
<property name="nombre1" column="CT0_NB1"/>
<property name="nombre2" column="CT0_NB2"/>
<property name="nombre3" column="CT0_NB3"/>
<property name="ordreAffichage" column="REF_ORDRE"/>
<property name="dateEffet" column="REF_DTEFFET"/>
<property name="dateMiseAJour" column="REF_DTMAJ"/>
<property name="dateCreation" column="REF_DTCREAT"/>
<property name="dateAnnulation" column="REF_DTANNUL"/>
<property name="redacteur" column="CT0_REDACT"/>
<property name="action" column="REF_ACTION"/>
</class>
<query name="get_reference_data">
<![CDATA[
select referenceData
from DonneeReference referenceData
where
referenceData.table = :table
and referenceData.version = (
select min(tab.version)
from DonneeReference tab
where
tab.table = referenceData.table
and tab.code = referenceData.code
and tab.filtre = referenceData.filtre
and referenceData.dateEffet <= :date
)
and referenceData.dateAnnulation is null
order by referenceData.ordreAffichage ASC, referenceData.filtre ASC, referenceData.code ASC
]]>
</query>
</hibernate-mapping>
我遇到了同样的错误,通过将复合键定义为一个独立的java类来解决这个问题,该类实现了Serializable
,并且具有正确的等于
public class DonneeReference {
private DonneeReferenceId donneeReferenceId; // <-- composite key goes here
private String zone3;
private String libelle;
<other fields here>
<getter & setter for all the fields>
}
public DonneeReferenceId implements Serializable {
private String table;
private String code;
private String filtre;
private String version;
<getter & setter for all the fields>
<equals & hashCode involving all fields here>
}
并且hbm文件应该相应地
<class name="DonneeReference" table="REF_REFPARAM">
<composite-id name="donneeReferenceId" class="DonneeReferenceId">
<key-property name="table" column="CT0_IDENTAB"/>
<key-property name="code" column="CT0_CRIT1"/>
<key-property name="filtre" column="CT0_CRIT2"/>
<key-property name="version" column="CT0_NOVERS"/>
</composite-id>
<property name="zone3" column="CT0_ZONX3"/>
<property name="libelle" column="CT0_ZONX2"/>
...
</class>
参考:技能大师
我试图提供应用程序在Spring与懒惰取实体之间的关系。 模型"用户": “跟踪器”模型 继承了带有@EntityGraph的JPA存储库。通过这一点,我试图为select用户提供与以下相关的所有跟踪器: 存储库类: 和控制器: 查询“/customers/1”可以正常工作。它返回没有跟踪器的所有客户(相应地,延迟获取)。 但是"/顾客/1/with Tracker"返回以下异常:
我有这个实体,它的ID定义在可识别类。 InventoryLoad的主键为InventoryLoadID 这是上述类的ID 我正在使用Criteria builder访问ID类的列。 要使用 Path 来获取此信息以获取 PK 的库存 ID 的路径。 获取此错误
所以我有这个kotlin项目: 获取此异常: 有一个小型演示项目:https://github.com/TomGrill/spring-hibernate-bug 应要求:
我有一个实体叫做 我正在尝试使用criteriaBuilder和谓词进行搜索 我在这里得到了例外 我曾提出一些类似的问题,但我没有得到任何解决办法。
我的服务类 和我的控制器类:
问题内容: 我试图找出为什么我的Web应用程序抛出一个 当我从中复制配置的一个姐妹悄悄地运行时。 我有: 通过右键单击并选择“新的持久性”从netbeans创建一个新的持久性,我不在乎我提供的实际值,但只需要在正确的目录中创建persistence.xml文件即可。 如下编辑我的context.xml,以匹配工作姐妹项目中的那个 编辑了我的web.xml以包含资源DataSource,如下所示 如