Ret*_*n.h 5 java spring spring-data-jpa
有一天,我正在与一个问题作斗争。让我们开始吧。我有 3 个类,如标签、优惠和动物
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "animals")
public class Animal {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "animal_id")
private Long id;
@Column(name = "name")
@NotNull
private String name;
@Column(name = "description")
@NotNull
private String text;
@Column(name = "quantity")
@NotNull
private int count;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id", nullable = false)
private User user;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "tag_id", nullable = false)
private Tag tags;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "offer_id", nullable = true)
private Offer offer;
Run Code Online (Sandbox Code Playgroud)
优惠
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "offer")
public class Offer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "offer_id")
private Long id;
@Column(name = "title")
@NotNull
private String title;
@Column(name = "description")
@NotNull
private String text;
@Column(name = "price")
@NotNull
private int price;
@Column(name = "contact")
@NotNull
private int contact;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "create_date", nullable = false, updatable = false)
@CreationTimestamp
private java.util.Date createDate;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id", nullable = false)
private User user;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "tag_id", nullable = false)
private Tag tags;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "animal_id", nullable = false)
private Animal animal;
Run Code Online (Sandbox Code Playgroud)
和标签。
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "tags")
public class Tag {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "tag_id")
private long id;
@Column(name = "name")
@Email(message = "*Please provide a valid tag")
@NotEmpty(message = "*Please provide an tag")
private String name;
@OneToMany(mappedBy = "tags")
private Set<Offer> offers;
@OneToMany(mappedBy = "tags")
private Set<Animal> animals;
Run Code Online (Sandbox Code Playgroud)
OneToOne 关系是因为我想为一只动物提供一个报价。
我也有控制器喜欢显示添加新的报价。
@RequestMapping(value = "/postForm", method = RequestMethod.GET)
public String newOffer(Principal principal,Model model) {
String e_mail = principal.getName();
System.out.println(e_mail);
User user = userService.findUserByEmail(e_mail);
Offer offer = new Offer();
offer.setUser(user);
Long id = user.getId();
List<Tag> tags = tagService.findAlltags();
List<Animal> animal = animalRepository.findAnimalByUser(user);
model.addAttribute("tags", tags);
model.addAttribute("animals",animal);
model.addAttribute("offer", offer);
return "/postForm";
}
Run Code Online (Sandbox Code Playgroud)
我正在传递诸如动物和标签之类的列表来选择标签,以及分配给用户的动物。我的动物仓库。
public interface AnimalRepository extends JpaRepository<Animal, Long> {
List<Animal> findAnimalByUser(User user);
}
Run Code Online (Sandbox Code Playgroud)
实际上,我在正确显示动物方面存在问题。标签显示正确,但动物列表无法评估动物类别内的标签。更具体地说,让我向您展示 Inteliji 的回溯屏幕
imgur 的链接在此处输入链接描述 可能关系有问题,但究竟是什么?感谢所有的答案。:)
toString()Animal类中的方法会导致此问题。方法交替地构建返回字符串,Animal并且Tag类都相互引用,从而产生无限的过程。
去掉@Data注解(包括@ToString注解),自己实现toString()方法。