2017-02-02 10 views
2

Я использую Hibernate версии 5.2.6. У меня был экземпляр, где мне пришлось использовать аннотацию @AttributeOverrides, чтобы переопределить имя встроенного атрибута столбца, который я ранее использовал с другим объектом. Но, похоже, это не работает.@AttributeOverride не работает с Hibernate 5

Я получаю

Hibernate ERROR - Неизвестный столбец 'ADDRESS_LINE_1' в «списке полей

Ниже мой код:

Address.java

package com.myApps.data.entities; 

    import javax.persistence.Column; 
    import javax.persistence.Embeddable; 

    @Embeddable 
    public class Address { 


    @Column(name="ADDRESS_LINE_1") 
    private String addressLine1; 

    @Column(name="ADDRESS_LINE_2") 
    private String addressLine2; 

    @Column(name="CITY") 
    private String city; 

    @Column(name="STATE") 
    private String state; 

    @Column(name="ZIP_CODE") 
    private String zipCode; 

    public Address() { 
    } 

    public String getAddressLine1() { 
     return addressLine1; 
    } 

    public void setAddressLine1(String addressLine1) { 
     this.addressLine1 = addressLine1; 
    } 

    public String getAddressLine2() { 
     return addressLine2; 
    } 

    public void setAddressLine2(String addressLine2) { 
     this.addressLine2 = addressLine2; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

     public String getState() { 
     return state; 
    } 

    public void setState(String state) { 
     this.state = state; 
    } 

     public String getZipCode() { 
     return zipCode; 
     } 

     public void setZipCode(String zipCode) { 
     this.zipCode = zipCode; 
     } 
    } 

User.java

package com.myApps.data.entities; 

import java.util.Date; 

import javax.persistence.AttributeOverride; 
import javax.persistence.AttributeOverrides; 
import javax.persistence.Column; 
import javax.persistence.Embedded; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 

import org.hibernate.annotations.Formula; 

@Entity 
@Table(name = "FINANCES_USER") 
public class User { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name = "USER_ID") 
    private Long userId; 

    @Column(name = "FIRST_NAME") 
    private String firstName; 

    @Column(name = "LAST_NAME") 
    private String lastName; 

    @Column(name = "BIRTH_DATE") 
    private Date birthDate; 

    @Column(name = "EMAIL_ADDRESS") 
    private String emailAddress; 

    @Embedded 
    @AttributeOverrides({ 
      @AttributeOverride(name="addressline1", [email protected](name="USER_ADDRESS_LINE_1")), 
      @AttributeOverride(name="addressline2", [email protected](name="USER_ADDRESS_LINE_2")) 
      }) 
    private Address address; 

    @Column(name = "LAST_UPDATED_DATE") 
    private Date lastUpdatedDate; 

    @Column(name = "LAST_UPDATED_BY") 
    private String lastUpdatedBy; 

    @Column(name = "CREATED_DATE", updatable = false) 
    private Date createdDate; 

    @Column(name = "CREATED_BY", updatable = false) 
    private String createdBy; 

    @Formula("lower(datediff(curdate(), birth_date)/365)") 
    private int age; 

    public int getAge() { 
     return age; 
    } 

    public Address getAddress() { 
     return address; 
    } 


    public void setAddress(Address address) { 
     this.address = address; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public Long getUserId() { 
     return userId; 
    } 

    public void setUserId(Long userId) { 
     this.userId = userId; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public Date getBirthDate() { 
     return birthDate; 
    } 

    public void setBirthDate(Date birthDate) { 
     this.birthDate = birthDate; 
    } 

    public String getEmailAddress() { 
     return emailAddress; 
    } 

    public void setEmailAddress(String emailAddress) { 
     this.emailAddress = emailAddress; 
    } 

    public Date getLastUpdatedDate() { 
     return lastUpdatedDate; 
    } 

    public void setLastUpdatedDate(Date lastUpdatedDate) { 
     this.lastUpdatedDate = lastUpdatedDate; 
    } 

    public String getLastUpdatedBy() { 
     return lastUpdatedBy; 
    } 

    public void setLastUpdatedBy(String lastUpdatedBy) { 
     this.lastUpdatedBy = lastUpdatedBy; 
    } 

    public Date getCreatedDate() { 
     return createdDate; 
    } 

    public void setCreatedDate(Date createdDate) { 
     this.createdDate = createdDate; 
    } 

    public String getCreatedBy() { 
     return createdBy; 
    } 

    public void setCreatedBy(String createdBy) { 
     this.createdBy = createdBy; 
    } 

} 

Application.java

package com.myApps.data; 

import java.util.Date; 

import org.hibernate.Session; 
import org.hibernate.Transaction; 

import com.myApps.data.entities.Address; 
import com.myApps.data.entities.Bank; 
import com.myApps.data.entities.User; 

public class Application { 

    public static void main(String[] args) { 

     Session session = HibernateUtil.getSessionFactory().openSession(); 

     try { 

      Transaction transaction = session.beginTransaction(); 

      User user = new User(); 
      Address address = new Address(); 
      user.setFirstName("Beth"); 
      user.setLastName("Crimson"); 
      user.setCreatedBy("Mr Crimson"); 
      user.setCreatedDate(new Date()); 
      address.setAddressLine1("22nd street Meadows"); 
      address.setAddressLine2("House no: 15"); 
      user.setAddress(address); 

      session.save(user); 
      transaction.commit(); 

     } catch (Exception e) { 
      // TODO: handle exception 
     } 

     finally { 
      session.close(); 
     } 

    } 

} 

Я получаю

Hibernate ERROR - Unknown column 'ADDRESS_LINE_1' in 'field list'

Я не смог найти никаких проблем с моим кодом.

Пожалуйста, помогите мне решить эту проблему.

ответ

2

Если вы используете верблюжьего в @Embeddable:

@Column(name="ADDRESS_LINE_1") 
private String addressLine1; 

@Column(name="ADDRESS_LINE_2") 
private String addressLine2; 

Тогда вы должны использовать его в переопределениях, а также:

@Embedded 
    @AttributeOverrides({ 
      @AttributeOverride(name="addressLine1", [email protected](name="USER_ADDRESS_LINE_1")), 
      @AttributeOverride(name="addressLine2", [email protected](name="USER_ADDRESS_LINE_2")) 
      }) 
    private Address address; 
+0

Thankyou! Я не заметил эту опечатку! Решила проблему. – eccentricCoder

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

  • Нет связанных вопросов^_^