2015-08-10 4 views
2

Это то, что таблицы в базе данных MySQL выглядит следующим образом:зимовать один - на - один не отображается

mysql> DESCRIBE customer; 
+-------------+----------------------+------+-----+ 
| Field  | Type     | Null | Key | 
+-------------+----------------------+------+-----+ 
| customer_id | smallint(5) unsigned | NO | PRI | 
| first_name | varchar(45)   | NO |  | 
| last_name | varchar(45)   | NO |  | 
| address_id | smallint(5) unsigned | NO | MUL | 
+-------------+----------------------+------+-----+ 

mysql> DESCRIBE address; 
+-------------+----------------------+------+-----+ 
| Field  | Type     | Null | Key | 
+-------------+----------------------+------+-----+ 
| address_id | smallint(5) unsigned | NO | PRI | 
| address  | varchar(50)   | NO |  | 
+-------------+----------------------+------+-----+ 

И это, как я пытаюсь достичь одного - к - одному соотношению:

@Entity 
@Table(name = "customer") 
public class Customer { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int customer_id; 

    @Basic 
    private String first_name; 

    @Basic 
    private String last_name; 

    @OneToOne(targetEntity = Address.class) 
    @JoinColumn(name = "address_id") 
    private Address address; 

и Address.java

@Entity 
@Table(name = "address") 
public class Address { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int address_id; 

    @Basic 
    private String address; 

    @OneToOne(mappedBy = "address", targetEntity = Customer.class) 
    private Customer customer; 

Я тестирование с помощью простого теста:

@Test 
public void testGetAll() { 
    PersistenceUtil.buildEntityManagerFactory(); 
    AddressDaoImpl addressDao = new AddressDaoImpl(); 
    List all = addressDao.getAll(); 
    System.out.println(all.iterator().next()); 
} 

и я получаю:

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: address is not mapped [FROM address] 

Что я делаю неправильно? Почему Клиент не получает объект адреса?

Редактировать

Вот код для моих классов DAO:

package biz.tugay.saqila.dao; 
/* User: [email protected] Date: 08/08/15 Time: 10:18 */ 

import javax.persistence.EntityManager; 
import javax.persistence.EntityTransaction; 
import java.util.List; 

public abstract class GenericDaoImpl<T> implements GenericDao<T> { 

    @Override 
    public List getAll() { 
     EntityManager em = PersistenceUtil.getEntityManager(); 
     EntityTransaction transaction = em.getTransaction(); 
     transaction.begin(); 
     List<T> all = em.createQuery("FROM " + getTableName()).getResultList(); 
     transaction.commit(); 
     return all; 
    } 

} 

public class AddressDaoImpl extends GenericDaoImpl<Address> { 
    @Override 
    public String getTableName() { 
     return "address"; 
    } 
} 
+1

Вы можете вставить код GETALL() ? – wawek

+0

@wawek У меня есть, я также исправил вопрос, тест, который я скопировал здесь, был неправильным. –

+0

@wawek Ошибка тестирования: AddressDaoImpl addressDao = new AddressDaoImpl(); not CustomerDaoImpl .. –

ответ

3

JPQL (HQL) имена классов и свойств являются case sensitive. Так что в вашем запросе вы должны использовать правильное имя класса для Address объекта:

from Address ... 

Таким образом, исправить имя лица, чтобы начать с прописной A:

public class AddressDaoImpl extends GenericDaoImpl<Address> { 
    @Override 
    public String getTableName() { 
     return "Address"; 
    } 
} 
+0

Большое спасибо. Понимаю. –

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