Spring Boot一对多构造函数组成

时间:2018-07-27 21:31:20

标签: spring-boot constructor one-to-many

我对执行OnetoMany绑定时构建构造函数的正确方法有疑问。就我所知,我的代码运行良好,实际上我要问的是处理这种情况的首选方法是什么,包括能够对其进行测试。

我有2个具有一对多关系的课程。第一类如下:

public class IAmMany
{
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private long id;
   @ManyToOne
   @JoinColumn(name = "foriegn_key_one")
   @OnDelete(action = OnDeleteAction.CASCADE)
   private IAmTheOne one;

   public IAmMany(IAmTheOne one)
   {
      this.one = one;
      one.addMany(this);
   }
}

第二类如下:

this.many

这是为这两个类构建构造函数的正确方法吗?两者都没有设置就可以正常工作,直到在测试期间未初始化IAmMany的情况下以某种方式破坏我的IAmTheOneService为止。

如果我不向类中添加one.addMany(this)调用和方法,则类似地测试<?php /* Set e-mail recipient */ $myemail = "(email inserted here"; /* Check all form inputs using check_input function*/ $yourname = check_input($_POST['name'], "Enter your name"); $email = check_input($_POST['mail']); $message = check_input($_POST['message']); $type = "Job"; /* If e-mail is not valid show error message */ if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) { show_error("E-mail address not valid"); } /* Message for the e-mail */ $message = "Hello! Your contact form has been submitted by: Name: $yourname E-mail: $email Subject: $type Message: $message End of message "; /* Send the message using mail() function */ mail($myemail, $type, $message); /* Redirect visitor to the thank you page */ header('Location: index.html'); exit(); /* Used functions */ function check_input($data, $problem='') { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); if ($problem && strlen($data) == 0) { show_error($problem); } return $data; } function show_error($myError) { ?> <html> <body> <b>Please correct the following error:</b><br /> <?php echo $myError; ?> </body> </html> <?php exit(); } ?> 的服务会中断。

这是使用Spring Boot设置构造函数的正确方法,还是我缺少测试服务的正确方法?

为了进行测试,我在模拟存储库时设置了一些虚拟数据以使用Mockito进行服务。我认为这是我缺少初始化的地方,因为虽然Spring Boot可能会为我初始化事情,但仅在测试中构造对象时不会发生。

1 个答案:

答案 0 :(得分:0)

您是正确的,当Hibernate不处于活动状态时,您必须手动实例化测试所需的对象。是否要在构造函数中执行此操作完全是一个不同的问题,并且将取决于您的软件要求。

Hibernate Reference中的大多数@OneToMany示例(如果不是全部)都在与属性定义相同的行上对集合进行了预初始化。例如:private Set<IAmMany> many = new HashSet<>();。我认为这种方法不会出错。

对于IAmMany类,您的示例是管理对象之间关联的一种方法,但是再次如何管理它们取决于您的要求。

如果尚未阅读Hibernate Reference regarding Bidirectional association management。在这些情况下,Hibernate为您做什么和不为您做什么可能会有所帮助。链接尽可能地接近您的相关部分。搜索“示例307”以找到它。