2017-02-09 10 views
0

Я не знаю, как точно выразить то, что я ищу, поэтому я объясню, что у меня есть, а затем то, что я пытаюсь сделать.Как получить объект во «много» части из однонаправленного отношения «Один-ко-многим»?

У меня есть модель класса, которая имеет 2 класса с однонаправленными отношениями «один-ко-многим».

public class TaxType extends Entity implements java.io.Serializable { 
    //stuff 
    private Set<TaxTypeAttribute> listTaxTypeAttribute = new HashSet<>(0); 
} 
public class TaxTypeAttribute extends Entity implements java.io.Serializable { 
    private String attributeName; 
    //stuff, but no reference to TaxType 
} 

Entity Класс как первичный стандартный ключ, мы называем это «OID шаблон проектирования», но понятия не если это не похоже, что в английском.

public class Entity { 
    private String oid; 
    //constructor, get and set 
} 

На отображения, это выглядит следующим образом:

<class name="entity.TaxType" table="taxttype" catalog="tax_type" optimistic-lock="version"> 
    <id name="oid" type="string"> 
     <column name="OIDtt" length="50" /> 
     <generator class="uuid2" /> 
    </id>   
    <set name="listAtributoTipoImpuesto"> 
     <key column="OIDtt" not-null="true"/> 
     <one-to-many class="entidades.AtributoTipoImpuesto" /> 
    </set> 
</class> 
<!-- two separated files, this is just for showing --> 
<class name="entity.TaxTypeAttribute" table="taxtypeattribute" catalog="tax_type" optimistic-lock="version"> 
    <id name="oid" type="string"> 
     <column name="OIDtta" length="50" /> 
     <generator class="uuid2" /> 
    </id> 
    <property name="attributeName" type="string"> 
     <column name="attributeName" length="50" not-null="true" /> 
    </property> 
</class> 

В одном шаге программы, у меня есть TaxType и attributeName от TaxTypeAttribute, но мне нужно, чтобы получить полный TaxTypeAttribute. Я делаю запросы через API критериев. Я мог бы сделать taxType.getListTaxTypeAttribute(); и сделать цикл, пока не найду объект, но я хотел бы знать, есть ли способ сделать это, используя некоторые запросы Hibernate.

Я пытался делать taxType.getOid();, а затем использовать это и в attributeName, но он бросает исключение:

Exception in thread "main" org.hibernate.QueryException: could not resolve property: OIDtt of: entity.TaxTypeAttribute 

Любые улики? Спасибо вам, и простите меня за мой плохой английский

EDIT: Для того, чтобы следовать шаблонов проектирования, мы используем этот метод, чтобы сделать SELECT, querys: Awful thing we use for querys. То, как я это сделал это:

ArrayList<DTOCriteria> criteriaList = new ArrayList<>(); 
DTOCriteria c1 = new DTOCriteria(); 
c1.setAttribute("OIDtt"); 
c1.setOperation("="); 
c1.setValue(taxType.getOID()); 
criteriaList.add(c1); 
ArrayList<Object> found = search("TaxTypeAttribute"); 

Я мог бы добавить еще один DTOCriteria, если я хочу («ATTRIBUTENAME», «=»; ATTRIBUTENAME, например), но если первый не работает это своего рода бесполезный. Я также попытался (просто потому, что это бесплатно), используя атрибут «TaxType» в качестве атрибута и объект TaxType в качестве значения, но также не работал.

PS: код работает. Я использую его для других запросов и работает, он просто не работает для этого, или я не знаю, как заставить его работать. Может быть, вы не можете делать такого рода поиск, я не знаю.

+0

Похоже, что существует проблема с отображением. Исправьте имена pojo и столбцов и таблиц. Также отправьте свой код, где вы произвели запрос. – Akshay

+0

Отображение в порядке, по крайней мере, оно работает для каждого другого запроса Criteria. Это единственный, кто не работает. Я редактирую сообщение, чтобы добавить запрос – fkchaud

ответ

0

С точки зрения HQL/JPQL, вы можете написать свой запрос как:

SELECT tta FROM TaxType tt JOIN tt.listTaxTypeAttribute tta 
WHERE tt.oid = :oid 
    AND tta.attributeName = :attributeName 

Этот запрос будет возвращать вам TaxTypeAttribute экземпляры, которые соответствуют указанным критериям. Как вы переводите это на свой язык запросов, я не могу помочь.

+0

Я пробовал, и он работает ... К сожалению, нам не разрешено использовать JOIN, но, похоже, это единственный способ. Я расскажу об этом своим учителям. Спасибо вам! – fkchaud

+0

Что вы можете использовать? Возможно, обратная ссылка? – Naros