我对执行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可能会为我初始化事情,但仅在测试中构造对象时不会发生。
答案 0 :(得分:0)
您是正确的,当Hibernate不处于活动状态时,您必须手动实例化测试所需的对象。是否要在构造函数中执行此操作完全是一个不同的问题,并且将取决于您的软件要求。
Hibernate Reference中的大多数@OneToMany
示例(如果不是全部)都在与属性定义相同的行上对集合进行了预初始化。例如:private Set<IAmMany> many = new HashSet<>();
。我认为这种方法不会出错。
对于IAmMany
类,您的示例是管理对象之间关联的一种方法,但是再次如何管理它们取决于您的要求。
如果尚未阅读Hibernate Reference regarding Bidirectional association management。在这些情况下,Hibernate为您做什么和不为您做什么可能会有所帮助。链接尽可能地接近您的相关部分。搜索“示例307”以找到它。