我是“普通”后端开发的新手,我正在尝试为我的Spring Web应用程序实现评论系统。这里的问题是,如果一个评论被否决,那么评论所有者的“报应”也必须减少。
现在,我有一些用PHP开发Web的经验,使用一些自制的spaghetti编码框架,可以用下面这样的代码实现上述逻辑:
class Comment {
function getUser() { return db_find("users", User::class, $this->columns->owner); }
function downvote() {
$user = $this->getUser();
$user->columns->karma--;
db_persist("users", $user);
}
}
JPA bean的制作方式不同,因此我不能将上面的解决方案重新应用于它,尽管我最初的想法非常相似。我相信通过将Session传递给downvote方法可以实现类似的效果,方法如下:
class Comment {
// ...
@ManyToOne
@JoinColumn(name = "owner_id")
var owner: User? = null
fun downvote(session: Session) {
this.rating -= 1;
this.owner.karma -= 1;
session.save(this.owner)
session.save(this)
}
}
我也有过一个想法,把这个逻辑放在控制器里,但那个想法似乎也是一个糟糕的做法...
所以,我有一个实体(注解),它应该在修改(调用downvote)时修改另一个实体(用户),我不知道如何以类似JPA的方式实现所有这些。
1条答案
按热度按时间s6fujrry1#
首先,您应该将逻辑(例如,事务操作)与实体分离。
实体应该(或多或少)是一个pojo,您可以为这些业务逻辑实现创建另一个类。
典型的体系结构是: