gpt4 book ai didi

java - @AttributeOverride 不适用于 Hibernate 5

转载 作者:搜寻专家 更新时间:2023-11-01 02:37:56 24 4
gpt4 key购买 nike

我使用的是 Hibernate 5.2.6 版。我有一个实例,我必须使用 @AttributeOverrides 注释来覆盖我之前与另一个实体一起使用的嵌入式列属性的名称。但它似乎没有用。

我得到了

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

以下是我的代码:

地址.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;
}
}

用户.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", column=@Column(name="USER_ADDRESS_LINE_1")),
@AttributeOverride(name="addressline2", column=@Column(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;
}

}

应用程序.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'

我找不到我的代码有任何问题。

请帮我解决这个问题。

最佳答案

如果在@Embeddable 中使用驼峰式命名:

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

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

那么你也应该在覆盖中使用它:

@Embedded
@AttributeOverrides({
@AttributeOverride(name="addressLine1", column=@Column(name="USER_ADDRESS_LINE_1")),
@AttributeOverride(name="addressLine2", column=@Column(name="USER_ADDRESS_LINE_2"))
})
private Address address;

关于java - @AttributeOverride 不适用于 Hibernate 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42007625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com