当前位置: 首页 > 知识库问答 >
问题:

Spring Boot实体、关系和存储库混淆

寇涵容
2023-03-14

我对关系如何在实体中工作以及这对我的JPA存储库意味着什么感到困惑。

我有一个名为Loan的类,它为每个贷款存储一个专辑列表。

我有一个贷款库和一个专辑库。当我启动应用程序时,相册存储库中充满了相册。该专辑是自动生成的。

@Entity
public class Album implements Serializable {

private static final long serialVersionUID = 0x63A6DA99AA12AAA8L;

@Column @GeneratedValue(strategy = GenerationType.AUTO) @Id private Integer albumId;
@Column (unique=true) private String barcode;
@Column private String band;
@Column private String title;
@Column private String genre;
@Column private Integer year;
@Column private String artworkFilename;
@Column private Boolean enabled;
@Column private Boolean isLoanable;
@Column private Integer numberOfCopies;

@ManyToOne
private Loan loan;
public class Loan implements Serializable {

private static final long serialVersionUID = 0x62B6DA99AA12AAA8L;

public void setLoanId(Integer loanId) {
    this.loanId = loanId;
}

@Column @GeneratedValue(strategy = GenerationType.AUTO) @Id private Integer loanId;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Album> albums= new ArrayList<>();

@Column private Integer customerId;
@Column private Date dateLoaned;
@Column private Date dateToReturn;
@Column private Boolean expired;

我也很困惑为什么专辑必须引用带有ManyToOne注释的贷款。为什么相册必须提到贷款?

我大多习惯于关系数据库,所以也许我在以错误的方式思考事情。如果我只能添加新的专辑到贷款,那么它失败的目的,我正在努力做。

共有1个答案

袁凌
2023-03-14
    Loan and Album tables have a one-to-many relationship.
    So in Album your mapping should be like below:
    @ManyToOne
    @JoinColumn(name = "loan_id")
    private Loan loan;
Considering loan_id is the primary key of Loan.
And in Loan your mapping should be like below:
@OneToMany(mappedBy = "loan", cascade = CascadeType.ALL)
    private List<Album> albums;

@OneToMany and @ManyToOne defines a one-to-many and many-to-one relationship between 2 entities. @JoinColumn indicates the entity is the owner of the relationship: the corresponding table has a column with a foreign key to the referenced table. mappedBy indicates the entity is the inverse of the relationship
 类似资料:
  • 我希望像查询NodeEntity一样查询RelationshipEntity。 软件包信息: 此存储库不工作。 getEmployeeWorkingOnProject(String,String)返回NULL 我在关键字之后进行了修改,例如将其从修改为像这样的别名,并且还尝试更改了返回中别名的顺序。 我希望获得与特定员工和特定项目相关联的所有状态(边缘)。 或 或其他类型的类似结果,其中关系实体持

  • 保存“我的实体”时,通过关系工作的子实体不会保存到它们的表中。我不明白怎么回事。 员工: EmployeePhoneNumber: 如何设置这些字段,然后保存实体: 在完成该方法后,我没有一个错误,所有的工作都是正确的,只是表格没有填满--为什么?

  • 我正试图让我的头绕过DDD,但我卡住了。这就是我如何设置我的项目: 然后,我继续实现UserRepository,这里我遇到了另一个问题:UserRepository接口需要域用户模型,当我试图在DAL中实现接口时,我需要使用域用户模型来实现它,这导致DAO是为域模型而不是DAL模型创建的,这没有任何意义。唯一能修正的就是在域层中引用DAL,这是错误的。 有人能解释一下我在DDD中遗漏了什么吗?

  • 我有一个springboot项目,为了执行请求,我正在连接到我的mysql数据库。我有一个实体ExportBatch: 我在ExportBatchRepository中定义了一个新方法: 在我的控制器里,我是这样做的: 当我调用“/GetLastBatchsProblemes”时会遇到这个异常:java.lang.ClassCastException:[Ljava.lang.Object;不能强制

  • 我正在将nTier架构迁移到六边形架构中。我的域现在定义得很好,我有所有基础设施依赖项的接口。查看数据库存储库,我有几个数据库,在下面的一侧有一个类实现每个repo。我的问题是关于数据库依赖项的正确方法是什么: 1-在域端有一个接口来处理数据访问,然后依赖于基础设施实现,并有一个类作为所有数据库存储库的入口点,就像一个facade,从那里调用所有存储库实现。这种方法与我在nTier应用程序中已经使

  • 我想将审核更改持久化到oracle db。micro服务是一个带有hibernate的Spring Boot应用程序。我在javers的mvn存储库链接中发现了许多依赖项 我应该为oracle db使用哪个依赖项?