java - 一对多表创建

标签 java mysql hibernate jakarta-ee entity-relationship

我对 Hibernate 非常陌生,这是我的第一个企业级应用程序。 我陷入了一对多映射。我做了一整天的映射,但它没有为我提供正确的表结构。

这是我想要映射的 ER 图 ER Diagram

这些是类

饲料类别

@Entity
public class Feed {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String name;
private long quantity;
//With getters and setters
}

Feed 订单详细信息类

@Entity
public class FeedOrderDetail {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private double unitPrice;
private long quantity;

@OneToMany(cascade=CascadeType.MERGE)
@JoinColumn(name="feed_id")
private List<Feed> feed = new ArrayList<Feed>();

//Getters and Setters
}

部署应用程序后,我得到以下表结构

Table Structure

我的问题是 为什么feed_id在Feed表中? 每次添加 Feed 订单详细信息时都应该添加相同的 Feed 吗? (这不是一个好主意)

我可以通过将 @OneToMany 注释和属性移至 Feed 表来实现此目的。但如果我将其移至 Feed 类,我如何在 JSP 页面中表示 Feed 订单详细信息?

我也在这个项目中使用 spring。

最佳答案

我建议在关系的双方都有一个对象引用。

所以请引用List<FeedOrderDetail>在 Feed 中,并且对 FeedOrderDetail 中的 Feed 有一个引用.

类(class)动态:

@Entity
public class Feed {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;
    private String name;
    private long quantity;
    //With getters and setters

    // !new!
    @OneToMany(mappedBy = "feed") // mappedBy references the fieldname in the other Java class
    private List<FeedOrderDetail> details;
}

类(class)详细信息:

@Entity
public class FeedOrderDetail {

     @Id
     @GeneratedValue(strategy=GenerationType.AUTO)
     private Long id;
     private double unitPrice;
     private long quantity;

     @ManyToOne(cascade=CascadeType.MERGE)
     @JoinColumn(name="feed_id")
     private Feed feed; // only a single feed reference

     //Getters and Setters
}

如果您想使用 Hibernate 的 JPA API 获取提要列表,则可以使用以下代码:

TypedQuery<Feed> query = entityManager.createQuery("SELECT f FROM Feed f", Feed.class);
List<Feed> feeds = query.getResultList();

关于java - 一对多表创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31625492/

相关文章:

java - 空白弹出菜单和组合框

java - 通过 Java 连接到 Amazon EC2 上的 PostgreSQL

mysql - 分组、计数和连续圈数

mysql - Show FULL Columns 仅显示表的特定列

php - Laravel 迁移名称太长

hibernate - Spring 3.0 - @Transactional 运行时更改超时

java - 确定哪种类型的异常是可抛出的

java - 如何添加工具栏?

java - 初学者 - Spring/hibernate 集成,asm 不兼容

java - Hibernate还是SQL进行删除操作?