2013-12-06 4 views
0

Я используюДвунаправленный Mapping Один ко многим

hibernate-jpa-2.0-api-1.0.1.Final jar

hibernate-commons-annotations-4.0.4.Final

hibernate-core-4.2.5.Final

Мои классы сущностей компании и филиала:

@Entity 
@Table(name = "company") 
public class Company { 
    @Id 
    @Column(name = "ID") @GeneratedValue 
    private Integer id; 

    @OneToMany(mappedBy="company",cascade = CascadeType.ALL) 
    @Fetch(FetchMode.SELECT) 
    private Set<Branch> branchs; 
} 

@Entity 
@Table(name = "branch") 
public class Branch { 
    @Id @Column(name = "ID") @GeneratedValue 
    private Integer id; 

    @LazyCollection(LazyCollectionOption.FALSE) 
    @ManyToOne 
    @JoinColumn(name = "company_id") 
    private Company company; 
} 

Я получаю сообщение об ошибке на выполнение в HQL

session.createQuery("select new Company(id, name, branchs) from Company as company").list()

Я, имеющий конструктор в компании (id, название, от филиалов)

Ошибка:

2013-12-06 16:28:02 WARN SqlExceptionHelper:145 - SQL Error: 1064, SQLState: 42000 2013-12-06 16:28:02 ERROR SqlExceptionHelper:147 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as col_2_0_ from company company0_ inner join branch branchs1_ on company0_.ID=b' at line 1

Apache Tomcat Error Apache tomcat error

+0

Вы хотите выбрать идентификатор, имя, ветви всех записей в таблице компаний или вы хотите выбрать конкретную запись компании? –

+0

Могу ли я спросить, почему вы это делаете? Почему бы просто не выбрать c из компании c'? – mabi

+0

@mabi Это двунаправленное отображение. Поэтому, если у меня есть столбец для филиала компании id, и если я хочу вернуть все компании с их филиалом в компанию pojo. Поэтому я делаю это. Пожалуйста, предложите мне, если то же самое возможно другими способами. –

ответ

0

Вы проверили вашу собственность hibernate.dialect. Вы настроили его для MySql.

<property name="hibernate.dialect"> 
    org.hibernate.dialect.MySQLDialect 

+0

Да, я использую org.hibernate.dialect.MySQLDialect

0

Если вы хотите, чтобы выбрать все записи из таблицы компании, то вы можете использовать следующие HQL

Query query = session.getCurrentSession().createQuery("FROM Company AS c"); 
query.list(); 

или если вы хотите, чтобы добавить некоторые условия, то ваш HQL должно быть, как это

Query query = session.getCurrentSession().createQuery("SELECT c.id, c.name, c.branchs FROM Company AS c WHERE c.id = :id AND c.branchs = :branchs"); 
query.setParameter("id", 123); 
query.setParameter("branchs", "abc"); 
query.list(); 
+0

Он не работает, поскольку он снова с исключением, т. Е. Bad SQL-грамматик –

+0

@abhishek ameta, который вы использовали –

+0

SELECT c .id, c.name, c.branchs FROM Company AS c –

0

Возможно, вы можете попробовать следующие аннотации:

Я предполагаю, что компания является владельцем данных:

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
@JoinColumn (name = "ID") 
private Set<Branch> branchs; 

В классе Branch я аннотирования переменную экземпляра компании следующим образом:

@ManyToOne 
@JoinColumn (name="ID", insertable=false, updatable=false) 
private Company company; 

, как это Соединить делается на Идентификатор столбца вашего класса, и у вас есть преимущество в том, что таблица ссылок не создается.

+0

Я не могу это получить. не могли бы вы объяснить это? –

+0

Чтобы сопоставить двунаправленную по отношению ко многим, со стороной «один-ко-многим» в качестве стороны-владельца, вам нужно удалить элемент mappedBy и установить много в один @JoinColumn как вставляемый и обновляемый на false. Более подробную информацию можно найти в документации: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html, более конкретно в разделе 2.2.5.3.1.1. Двунаправленный –

Смежные вопросы