在我的项目中,用户和产品之间存在多对多关系。一个用户可以拥有许多产品,一个产品可以被许多用户拥有。
使用者JAVA
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable( name = "user_product",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "product_id"))
private List<Product> listOfProductsForUser;
Product.java
@JsonIgnore
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "listOfProductsForUser")
private List<User> listOfUsersForProduct;
在我的控制器中,我有一个路径,可以让我获得所有用户以及与用户相关联的嵌套产品,如下所示。
[
{
"userId": 1,
"userName": "Fido",
"age": 3,
"listOfProductsForUser": [
{
"productId": 1,
"productName": "tooth brush",
},
{
"productId": 2,
"productName": "potatoes",
},
{
"productId": 3,
"productName": "carrot",
}
]
},
{
"userId": 2,
"userName": "David",
"age": 12,
"listOfProductsForUser": [
{
"productId": 6,
"productName": "oranges",
},
{
"productId": 7,
"productName": "tomatoes",
},
{
"productId": 6,
"productName": "buns",
}
]
}
]
这很好,但我现在想获取所有应该有嵌套用户的产品(获取所有产品并查看哪些用户正在使用它们)。在尝试这样做时,我遇到了一个递归问题,我在产品上使用了JsonIgnore。java的ListofProductsfourser
变量停止递归。我怎样才能做到这一点?
尝试以下方法:
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable( name = "user_product",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "product_id"))
@JsonManagedReference
private List<Product> listOfProductsForUser;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "listOfProductsForUser")
@JsonBackReference
private List<User> listOfUsersForProduct;
这两个注释(@JsonManagedReference和@JsonBackReference)避免了无限递归。
我误解了这个问题。JSON中应该同时存在listofursforproduct
和listofursforruser
。前面的解决方案省略了listOfUsersForProduct。要同时拥有这两个功能,您需要使用@ray建议的@JsonIdentityInfo
:
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "userId")
public class User { }
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "productId")
public class Product { }
有几种方法可以处理这种双向关系问题。我认为@JsonIdtyInfo
是您的最佳方式。
您需要做的是更改用户
和产品
类,如下所示。
//other annotations
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "userId")
public class User {
// your code
}
//other annotations
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "productId")
public class Product {
// your code
}
注意:更多信息请点击此处
启动无限循环后,我无法关闭JFrame。 我想停止无限循环使用停止按钮。 我用开始按钮开始一个无限循环。我想用“停止”按钮关闭那个回路。 > if(stop.getModel(). isP的()){中断;}不工作 actionListener用于识别按钮单击并在循环也不起作用时使用中断语句终止 点击停止按钮,无限循环必须终止。在使用start Button启动无限循环后,我无法使用JFrame中的
我正在尝试做一个数字猜测游戏,如果用户匹配他们赢得现金的幸运数字,游戏将继续进行,直到他们用完现金。他们每打一轮都要付赌注。每一轮都会产生一个新的随机数。 我只想使用一个输入。当我把输入放在循环中,循环无限停止循环,当我把它放在循环外,它无限开始循环。我该怎么阻止这一切?我需要向while循环添加什么?我尝试突破,但我想继续比赛,直到钱用完。 我只想使用一个输入,但是当我把输入带出循环(lucky
不知道如何阻止这个while循环无限重复。我使用检查用户输入是否为int。如果没有输入int值,则循环将无限重复。
问题内容: 我有一个运行在无限循环上的脚本,并将其添加到数据库中,并且执行了一些我不能只停止一半的事情,所以我不能只按ctrl + C并停止它。 我希望能够以某种方式停止while循环,但是让它在停止之前完成最后一次迭代。 让我澄清一下: 我的代码看起来像这样: 我希望能够在结束或开始时中断while循环,但不要在执行操作之间中断,因为那样会很不好。 而且我不希望它在每次迭代后问我是否要继续。 感
我有一个程序,它每秒钟响一次,直到停止。问题是,在我按下“开始”并发出嘟嘟声后,我无法单击“停止”按钮,因为窗口冻结。欢迎任何帮助。
问题内容: 有没有一种方法可以停止执行无限循环的线程? 问题答案: 是的,您可以将替换(或在逻辑上)。 这样,当任务取消时,循环将终止。 循环看起来像这样: 使用应该是这样的: