所以我使用Hibernate,我得到了一个名为personAddress的实体,这是一个存在于数据库中的实体,因为我使用微服务,所以我使用namedQuerys来进行连接,因为有一些实体我需要加入,但我没有,这是我在hbm中的原生查询:
select address.*, cit.description cityName, sta.description stateName, ctry.description_iso_common countryName from PERSON_ADDRESS address
inner join APP_CITIES cit on cit.id =address.city_id
inner join APP_STATES sta on sta.id= address.state_id
inner join APP_COUNTRY ctry on ctry.id = address.country_id
and address.person_id = :param
问题是,cityName、stateName和countryName不在数据库对象上,因为它们来自一个关系,所以在我的实体中,我将它们作为@Transient,但在persist上,它仍然试图持久化这些列,因此它返回持久化错误(com.microsoft.sqlserver.jdbc.SQLServerException:无效的列名'cityName')如果我将类的getter设置为@Transient,它不会给予持久性错误,但查询不会打印城市。这是我的仓库中的findByPersonIs函数:
public List<PersonAddress> findByPersonIs(String iso,String personId, int offset, int limit){
Query<PersonAddress> namedQuery = null;
namedQuery = sessionFactory.getCurrentSession().createNamedQuery("findByPersonIs", PersonAddress.class);
namedQuery.setParameter("param", "%".concat(personId).concat("%").toLowerCase());
// namedQuery.setParameter("codeIso", "%".concat(iso).concat("%").toLowerCase());
namedQuery.setParameter("param", personId);
//namedQuery.setParameter("codeIso", iso);
namedQuery.setMaxResults(limit).setFirstResult(offset);
return namedQuery.getResultList();
}
将感谢帮助解决这个问题,因为我不能把丢失的表共享(DDD),也不允许我检索到一个DTO查询(不知道为什么)
我希望实体有一个@Transient字段,这个字段不会持久化,但不知何故仍然希望检索这个值。
1条答案
按热度按时间kt06eoxx1#
解决这个问题最有效的方法是创建一个结果集Map,在我的例子中,我想仍然使用命名查询,这样我就可以将其保留在我的xml中,但如果创建一个本地查询,也可以工作,这是我的XML捕获dto: