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

ManyToOne未与父ID映射

周鸿运
2023-03-14

我发现了其他有相同错误的主题,但没有一个似乎涵盖了我的问题。

你能帮我弄清楚是什么问题吗?

多谢!

import lombok.AccessLevel;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.Setter;
import lombok.experimental.Accessors;

@Accessors(fluent = true)
@Data
@Entity
@NoArgsConstructor
public class BusinessDomain {
    @Setter(AccessLevel.NONE)
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @NonNull
    @Column(unique=true)
    private String name;

    @OneToMany(mappedBy = "domain", cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<BusinessSubDomain> subDomains = new LinkedHashSet<>();

    public void addSubDomain(BusinessSubDomain subDomain) {
        subDomains.add(subDomain);
    }
}

@Accessors(fluent = true)
@Data
@Entity
@NoArgsConstructor
public class BusinessSubDomain {
    @Setter(AccessLevel.NONE)
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;

    @ManyToOne(optional = false)
    @JoinColumn(name = "business_domain_id", referencedColumnName="id")
    private BusinessDomain domain;
}
@Override
public BusinessDomain saveOrUpdate(BusinessDomain businessDomain) throws OrcaException {
    try {
        BusinessDomain domain = businessDomainRepository.findByName(businessDomain.name());
        if(null == domain) {
        // Repository class not overriden (extends CrudRepository<BusinessDomain, Long>)
            return businessDomainRepository.save(businessDomain);
        } else {
            domain.description(businessDomain.description());
            domain.subDomains(businessDomain.subDomains());
            return businessDomainRepository.save(domain);
        }
    } catch (Exception e) {
        throw new OrcaException(e);
    }
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class BusinessDomainTest {
    @Test
    @Transactional
    public void createBusinessDomainWithSubDomain() throws OrcaException {
        BusinessDomain passengerBusinessDomain = new BusinessDomain().name(DOMAIN_NAME).description(DOMAIN_DESCRIPTION);
        BusinessSubDomain distributionBusinessSubDomain = new BusinessSubDomain().name(SUBDOMAIN_NAME)
                .description(SUBDOMAIN_DESCRIPTION);
        passengerBusinessDomain.addSubDomain(distributionBusinessSubDomain);
        businessDomainService.saveOrUpdate(passengerBusinessDomain);
        BusinessDomain domain = businessDomainService.findByName(DOMAIN_NAME);
    }
}

共有1个答案

鞠鸿雪
2023-03-14

我终于明白了。

首先,实体加法器必须是

public void addSubDomain(BusinessSubDomain subDomain) {
    subDomains.add(subDomain);
    subDomain.domain(this);
}

但这会导致无限调用哈希方法的无限循环。

 类似资料:
  • 所以我在网上搜索了我的问题的答案,但没有找到有帮助的东西,基本上是需要在两个类之间有一个ManyToOne关系,其中一个类有一个EmbeddedId,我要把代码留在这里,错误信息是它给(我使用野蝇来运行服务器)。 公共类InventoryPK实现可序列化{ } @实体@Table(name=“inventario”,schema=“mxnextmob”) 公共类库存扩展基本模型{ } 公共类公司扩

  • 问题内容: 我在父子关系中使用javax.persistence.OneToMany关系。父ID为null,我已经阅读了Stackoverflow中的所有相关文章,但没有得到我所缺少的任何线索。 根据提供的序列,所有对应的PK都填充在父表和子表中,但是FK在子表中设置为null 家长班: 儿童班: 服务等级: 样本json 请提出建议。 问题答案: 通常,空FK列仅来自设置关系的一侧。 我想你有以

  • 问题内容: 我有2个名为PurchaseList.java和PurchaseListItems.java的类 我必须在PurchaseListItems中映射PurchaseList PurchaseList.java PurchaseListItems.java 一切都很好,但我在pl_id中为空。请告诉我我错了 问题答案: 您的映射实际上定义了两个独立的单向关系。您想要的是一个双向关系。下面的

  • 问题内容: 我看不到“多对一”关系与“一对一”关系的架构有什么区别: 与 有什么区别吗? 问题答案: 它们在架构上看起来完全相同,但是在Hibernate Layer上有所不同。 如果尝试这样的操作: 一切都会好起来的。但是,保存后,如果您尝试获取订单: 当然,在两种情况下,您的Address类应该看起来有所不同。

  • 我在映射时遇到一个问题: 马达。Java 查询“from motor”是一个classname。但它仍然不起作用。如何按id vnopol查询?

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