GVKun编程网logo

@OneToMany映射JPA中的父ID为空(jpa 映射)

9

以上就是给各位分享@OneToMany映射JPA中的父ID为空,其中也会对jpa映射进行解释,同时本文还将给你拓展@ManyToOneJPA关系可以为空吗?、Hibernate/JPAManyToOn

以上就是给各位分享@OneToMany映射JPA中的父ID为空,其中也会对jpa 映射进行解释,同时本文还将给你拓展@ManyToOne JPA关系可以为空吗?、Hibernate / JPA ManyToOne与OneToMany、Hibernate问题-“使用@OneToMany或@ManyToMany定位未映射的类”、Honenate OnetoMany,ManyToOne映射为null等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

@OneToMany映射JPA中的父ID为空(jpa 映射)

@OneToMany映射JPA中的父ID为空(jpa 映射)

我在父子关系中使用javax.persistence.OneToMany关系。父ID为null,我已经阅读了Stackoverflow中的所有相关文章,但没有得到我所缺少的任何线索。
根据提供的序列,所有对应的PK都填充在父表和子表中,但是FK在子表中设置为null

家长班:

@Entity@Table(name = "DIVERSITY_TEMPLATE")public class DiversityTemplate implements Serializable {    private static final long serialVersionUID = 1L;    @Id    @SequenceGenerator(name = "DIVERSITY_TEMPLATE_ID", sequenceName = "DIVERSITY_TEMPLATE_ID", allocationSize = 1)    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "DIVERSITY_TEMPLATE_ID")    @Column(name = "DIVERSITY_TEMPLATE_ID")    private Integer diversityTemplateId;    @OneToMany(cascade = CascadeType.ALL, mappedBy = "diversityTemplate", fetch = FetchType.LAZY)    private List<DiversityTemplateAttribute> attributes = new ArrayList<>();

儿童班:

@Entity@Table(name = "DIVERSITY_TEMPLATE_ATTRIBUTE")@TypeName("DiversityTemplateAttribute")public class DiversityTemplateAttribute implements Serializable {    private static final long serialVersionUID = 1L;    @Id    @SequenceGenerator(name = "DIVERSITY_TEMPLATE_ATTR_ID", sequenceName = "DIVERSITY_TEMPLATE_ATTR_ID", allocationSize = 1)    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "DIVERSITY_TEMPLATE_ATTR_ID")    @Column(name = "DIVERSITY_TEMPLATE_ATTR_ID")    private Integer diversityTemplateAttributeId;    @ManyToOne(fetch = FetchType.LAZY)    @JoinColumn(name = "DIVERSITY_TEMPLATE_ID", nullable=false, referencedColumnName = "DIVERSITY_TEMPLATE_ID")    private DiversityTemplate diversityTemplate;

服务等级:

 diversityTemplateRepository.save(diversityTemplate);

样本json

{  "diversityTemplateId": 0,  "attributes": [{    "diversityTemplateId": 0,    "diversityTemplateAttributeId": 0,  }, {    "diversityTemplateId": 0,    "diversityTemplateAttributeId": 0,  }]}

请提出建议。

答案1

小编典典

通常,空FK列仅来自设置关系的一侧。

我想你有以下

DiversityTemplate diversityTemplate = ...diversityTemplate.getAttributes().add(...)...diversityTemplateRepository.save(diversityTemplate);

这是错误的,因为他们DiversityTemplateAttribute不了解父母,只有父母知道他的孩子。

解决这个问题很容易,您必须在子级中设置父级引用。

diversityTemplateAttribute.setDiversityTemplate(diversityTemplate);

或者,您可以将此逻辑放入方法中,DiversityTemplate该方法会自动将属性添加到列表+设置反向引用。

@ManyToOne JPA关系可以为空吗?

@ManyToOne JPA关系可以为空吗?

我有一个表具有另一个表的外键(许多关系),但我希望它可以为空。

像这样:

public class SubType() {    @Id    @GeneratedValue(generator = "system-uuid")    @GenericGenerator(name = "system-uuid", strategy = "uuid")    private String id;}public class TopUp {    @Column(nullable = true)    @ManyToOne(optional = false, fetch = FetchType.LAZY)    private SubType subType;}

但是@Column(nullable =true)抛出NullPointerException和表示子类型不能为null。有什么办法可以使ManyToOne接受null?

答案1

小编典典

您需要设置:

@ManyToOne(optional = true, fetch = FetchType.LAZY)

optional=false

@Column(nullable=true)是指示DDL生成工具,包括NULLSQL列类型约束。

Hibernate / JPA ManyToOne与OneToMany

Hibernate / JPA ManyToOne与OneToMany

我目前正在阅读有关实体关联的Hibernate文档,但遇到一些困难却难以理解。它在本质上做的区别ManyToOneOneToMany联系。尽管我在实际项目中使用了它们,但是我无法完全理解它们之间的差异。据我了解,如果一个表/一个实体ManyToOne与另一个实体有关联,则该关联应来自另一侧OneToMany。那么,我们应该如何根据具体情况决定选择哪个呢?它又如何影响数据库/查询/结果?到处都有很好的例子吗?

PS:我认为这与问题相关,如果有人可以解释关联所有者的观点以及双向关联和单向关联之间的区别,那将是有帮助的。

答案1

小编典典

假设您有一个订单和一个订单行。您可以选择在Order和OrderLine之间具有单向OneToMany(Order将具有OrderLines的集合)。或者,您可以选择在OrderLine和Order之间具有ManyToOne关联(OrderLine将引用其Order)。或者,您可以选择同时拥有两者,在这种情况下,该关联将成为双向的OneToMany
/ ManyToOne关联。

您选择的解决方案主要取决于情况以及实体之间的耦合程度。例如,如果用户,公司,提供者都具有许多地址,则在每个人和地址之间都具有单向性,而使地址不知道其所有者是有意义的。

假设您有一个用户和一条消息,一个用户可以有数千条消息,那么将其建模为从消息到用户的仅一个ManyToOne可能是有意义的,因为无论如何您很少会询问用户的所有消息。不过,由于JPQL查询通过导航实体之间的关联而在实体之间进行连接,因此可以使该关联仅用于双向查询。

在双向关联中,您可能处于对象图不一致的情况。例如,订单A会有一组空的OrderLines,但是某些OrderLines将具有对Order
A的引用。JPA强制始终使关联的一侧为所有者一侧,而另一侧为相反一侧。JPA将忽略反面。所有者一方是决定存在什么关系的一方。在OneToMany双向关联中,所有者方必须是多方。因此,在前面的示例中,所有者端将是OrderLine,而JPA将保留行与订单A之间的关联,因为这些行都引用了A。

这样的关联将这样映射:

为了 :

@OneToMany(mappedBy = "parentOrder") // mappedBy indicates that this side is the    // inverse side, and that the mapping is defined by the attribute parentOrder    // at the other side of the association.private Set<OrderLine> lines;

在OrderLine中:

@ManyToOneprivate Order parentOrder;

Hibernate问题-“使用@OneToMany或@ManyToMany定位未映射的类”

Hibernate问题-“使用@OneToMany或@ManyToMany定位未映射的类”

我正在使用“hibernate注释”找到我的脚,并且遇到了一个问题,希望有人可以提供帮助。

我有2个实体,分别是Section和ScopeTopic。该部分具有List类成员,因此具有一对多关系。运行单元测试时,出现此异常:

使用@OneToMany或@ManyToMany定位未映射的类:com.xxx.domain.Section.scopeTopic
[com.xxx.domain.ScopeTopic]

我会假设该错误暗示我的ScopeTopic实体未映射到表?我看不到我做错了。这是实体类:


@Entity
public class Section {
    private Long id;
    private List<ScopeTopic> scopeTopics;

    public Section() {}

    @Id
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @OneToMany
    @JoinTable(name = "section_scope",joinColumns = {@JoinColumn(name="section_id")},inverseJoinColumns = {@JoinColumn(name="scope_topic_id")} )
    public List<ScopeTopic> getScopeTopic() {
        return scopeTopic;
    }

    public void setScopeTopic(List<ScopeTopic> scopeTopic) {
        this.scopeTopic = scopeTopic;
    }
}

@Entity
@Table(name = "scope_topic")
public class ScopeTopic {
    private Long id;
    private String topic;

    public ScopeTopic() {}

    @Id
    public Long getId() {
        return id;
    }

    public void setId() {
        this.id = id;
    }

    public String getTopic() {
        return topic;
    }

    public void setTopic(String topic) {
        this.topic = topic;
    }
}

我很确定这是我自己的理解不足造成的,所以一些指导会很棒,谢谢!

Honenate OnetoMany,ManyToOne映射为null

Honenate OnetoMany,ManyToOne映射为null

我有2个名为PurchaseList.java和PurchaseListItems.java的类

我必须在PurchaseListItems中映射PurchaseList

PurchaseList.java

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="pl_id",referencedColumnName="id")
private List<PurchaseListItems> purchaseListItems;

PurchaseListItems.java

@ManyToOne
@JoinColumn(name="pl_id")
private PurchaseList purchaseListId;

一切都很好,但我在pl_id中为空。请告诉我我错了

关于@OneToMany映射JPA中的父ID为空jpa 映射的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于@ManyToOne JPA关系可以为空吗?、Hibernate / JPA ManyToOne与OneToMany、Hibernate问题-“使用@OneToMany或@ManyToMany定位未映射的类”、Honenate OnetoMany,ManyToOne映射为null等相关知识的信息别忘了在本站进行查找喔。

本文标签: