【问题标题】:'Basic' attribute type should not be Persistence Entity“基本”属性类型不应是持久性实体
【发布时间】:2020-03-28 11:30:04
【问题描述】:

我在另一个实体类中引用一个实体并收到此错误。下面是示例代码。我在persistence.xml 中也有这些类。

是什么导致了这个问题?我正在使用 Spring 数据 JPA 和 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;
    }
}

【问题讨论】:

  • 1.您正在混合字段和属性级别的注释 - 使用 on 或其他。 2.你有一个实体ServiceTypeEntity,但UsersEntity有一个Address的引用
  • @AlanHay 这是帖子中的错误。我用正确的类名更新了它。那么,我应该使用哪个注释来解决这个问题?
  • 是的,地址是从用户实体引用的。在后端有两个数据库表。用户和地址。用户有一个外键 address_id,它是 Address 表中的 id。

标签: java spring-boot spring-data-jpa


【解决方案1】:

所以尝试以下方法:

@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;
    }
}

基本上我所做的就是替换 Long 的 long。并添加了@OneToOne 我删除了@Basic,因为它是可选的。我相信它应该可以正常工作

【讨论】:

  • 你标记了 spring-boot 但你提到你正在使用 persistence.xml (这不会被阅读为 spring boot)我对你使用的是什么感到困惑。你用的是spring-boot吗?
  • 是的,我使用的是 Spring Boot。 persistence.xml 用于创建实体类。
【解决方案2】:

您错过了实体之间的关系类型。例如。您可以将单向@OneToOne 定义为

//...
public class UsersEntity {
//..
  @OneToOne(mappedBy = "ugdArea", fetch = FetchType.LAZY)
  @JoinColumn(name = "address_id", nullable = false)
  private Address address;
//...
}

【讨论】:

    猜你喜欢
    • 2013-05-06
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    相关资源
    最近更新 更多