Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一对多表创建_Java_Mysql_Hibernate_Jakarta Ee_Entity Relationship - Fatal编程技术网

Java 一对多表创建

Java 一对多表创建,java,mysql,hibernate,jakarta-ee,entity-relationship,Java,Mysql,Hibernate,Jakarta Ee,Entity Relationship,我对Hibernate非常陌生,这是我的第一个企业级应用程序。 我陷入了一对多的映射。我做了一整天的映射,但它没有给我正确的表结构 这是我要绘制的ER图 这些是课程 饲料类 @Entity public class Feed { @Id @GeneratedValue(strategy=GenerationType.AUTO) private long id; private String name; private long quantity; //With getters and set

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

这是我要绘制的ER图

这些是课程

饲料类

@Entity
public class Feed {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String name;
private long quantity;
//With getters and setters
}
提要订单详细信息类

@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
}
@实体
公共类FeedOrderDetail{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私人双单价;
私人长数量;
@OneToMany(cascade=CascadeType.MERGE)
@JoinColumn(name=“feed\u id”)
私有列表提要=新的ArrayList();
//接球手和接球手
}
部署应用程序后,我得到以下表结构

我的问题是 为什么提要_id在提要表中? 我是否应该在每次添加提要订单细节时添加相同的提要?(这不是个好主意)

我可以通过将@OneToMany注释和属性移动到提要表来实现这一点。但若我将其移动到Feed类,那个么如何在JSP页面中表示Feed订单细节呢


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

您是反向设计的。您的模式表示1个Feed实例包括M个FeedOrderDetail实例


因此,在类提要中,您应该有一个
列表
。但那不是你做的。FeedOrderDetail中有一个
列表。

我建议在关系的两侧都有一个对象引用

因此,请在提要中引用
列表
,并在
FeedOrderDetail
中引用一个提要

类提要:

@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;
}
如果希望使用Hibernate的JPA API获取提要列表,则可以使用以下代码:

TypedQuery<Feed> query = entityManager.createQuery("SELECT f FROM Feed f", Feed.class);
List<Feed> feeds = query.getResultList();
typedqueryquery=entityManager.createQuery(“从Feed f中选择f”,Feed.class);
列表提要=query.getResultList();
正确的答案是:

@Entity
public class Feed {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String name;
private long quantity;
//With getters and setters
@OneToMany(cascade=CascadeType.MERGE, mappedBy="feed")
private List<FeedOrderDetail> orders = new ArrayList();
}
我的问题是为什么feed_id在feed表中

你是对的,如果你的ER图是对的,就不应该这样

您的ER图和表结构不匹配,所以我尝试根据您的ER图为您提供类映射

Feed.java

@Entity
public class Feed {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String name;
private long quantity;
//With getters and setters
@OneToMany(fetch = FetchType.LAZY, mappedBy = "feed")
    public Set<FeedOrderDetail> getFeedOrderDetail() {
        return this.feedOrderDetail ;
    }
}
@Entity
public class FeedOrderDetail {

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

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "FEED_ID", nullable = false)
    public Feed getFeed() {
        return this.feed;
    }

//Getters and Setters
}

我希望这会有帮助:)

你的答案很有魅力。但如何将这些字段放在JSP页面中呢。因为列表在提要类中?如何以jsp形式访问?@thusithaniroshan我添加了一些代码,说明如何检索提要列表。这能解决您的问题吗?如果我们每次添加提要订单细节时都将M侧移到提要表,那么就会有重复的提要行。不是吗?我没建议你移动M面去喂食。我的建议正好相反:您的模式是正确的,但您的代码不是,因为它不尊重模式。提要有很多细节。这就是你想要的。但是您用Java编写的代码是“一个细节有很多提要”。对不起,误会了。我现在明白了。谢谢你的帮助。
@Entity
public class Feed {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String name;
private long quantity;
//With getters and setters
@OneToMany(fetch = FetchType.LAZY, mappedBy = "feed")
    public Set<FeedOrderDetail> getFeedOrderDetail() {
        return this.feedOrderDetail ;
    }
}
@Entity
public class FeedOrderDetail {

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

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "FEED_ID", nullable = false)
    public Feed getFeed() {
        return this.feed;
    }

//Getters and Setters
}