'Basic' attribute type should not be Persistence Entity
Sebastian Wright
I am referencing an Entity in another Entity class and getting this error. Below is sample code. I have these classes in the persistence.xml as well.
What is causing this issue? I am using Spring data JPA and Hibernate.
import javax.persistence.*;
@Entity
@Table(name = "users", schema = "university")
public class UsersEntity { private long id; @JoinColumn(name = "address_id", nullable = false) private Address address; @Id @Column(name = "id") public long getId() { return id; } public void setId(long id) { this.id = id; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; }
}import javax.persistence.*;
@Entity
@Table(name = "address", schema = "university")
public class AddressEntity { private long id; private String street; @Id @Column(name = "id") public long getId() { return id; } public void setId(long id) { this.id = id; } @Basic @Column(name = "street") public String getStreet() { return street; } public void setStreet(String street) { this.street = street; }
} 3 2 Answers
So try the following:
@Entity
@Table(name = "users", schema = "university")
public class UsersEntity { private Long id; private AddressEntity address; @Id @Column(name = "id") public Long getId() { return id; } public void setId(long id) { this.id = id; } @OneToOne @JoinColumn(name = "address_id", nullable = false) public AddressEntity getAddress() { return address; } public void setAddress(AddressEntity address) { this.address = address; }
}
@Entity
@Table(name = "address", schema = "university")
public class AddressEntity { private Long id; private String street; @Id @Column(name = "id") public Long getId() { return id; } public void setId(long id) { this.id = id; } @Column(name = "street") public String getStreet() { return street; } public void setStreet(String street) { this.street = street; }
}Basically what I did was replace the long for Long. and added the @OneToOne I removed the @Basic since its optional. I believe with that it should just work
2You missed the type of relationship between entities. E.g. you can define one-directional @OneToOne as
//...
public class UsersEntity {
//.. @OneToOne(mappedBy = "ugdArea", fetch = FetchType.LAZY) @JoinColumn(name = "address_id", nullable = false) private Address address;
//...
}