Здравствуйте, я пытаюсь добавить некоторую логику в интерфейс для управления сущностями
логика была такова , что сначала юзер регестрируется, потом на личной странице он имеет возможность добавить коробку и видеть все свои коробки(изначально у него их нет)
так же он имеет возможность редактировать или удалить коробку , при редактировании коробки он имеет возможность изменить ее параметры или добавить туда датчиков или растений (изначально их там нет)
у меня был User у которого есть роли(в моем случае только одна), и по идее должны быть коробки
@Entity
@Table(name = "usr")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private String email;
private boolean active;
@ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
@CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"))
@Enumerated(EnumType.STRING)
private Set<Role> roles;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "responsibleUser", cascade = CascadeType.ALL)
private List<GrowBox> growBoxes;
public User() {
}
// getters, setters
}
есть сами коробки , у которых есть несколько (или не несколько) растений и датчиков
@Entity
@Table(name = "growBoxes")
public class GrowBox {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;
private Integer length;
private Integer width;
private Integer height;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "responsibleGrowBox", cascade = CascadeType.ALL)
private List<Plant> plants;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "activeGrowBox", cascade = CascadeType.ALL)
private List<Sensor> sensors;
@ManyToOne
@JoinColumn(name = "user_id")
private User responsibleUser;
public GrowBox() {
}
// Getters, setters
}
собстна есть сами растения и датчики
@Entity
@Table(name = "plants")
public class Plant {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String plantName;
private Integer num;
private String status;
@ManyToOne
@JoinColumn(name = "gb_id")
private GrowBox responsibleGrowBox;
public Plant() {
}
//...
}
@Entity
@Table(name = "sensors")
public class Sensor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String sensorName;
private Integer value;
@ManyToOne
@JoinColumn(name = "agb_id")
private GrowBox activeGrowBox;
public Sensor() {
}
//....
}
после я создаю repo интерфейс наследуя его от JpaRepo
и все работает нормально таблицы создаются (сам UI я пока не делал под коробки )
так же у меня был Юзер репо в который я накидал методов своих для того чтобы искать пользователя при попытке регистрации по мылу и имени и в случае чего говорить что такой пользователь есть
public interface UserRepo extends JpaRepository<User, Long> {
User findByUsername(String username);
User findByEmail(String email);
}
и на этом этапе все нормально ( UI под регистрацию и аутентификацию есть )
после я решил добавить в Репо для коробок метод который бы позволил мне найти коробку по ID юзера (или можно по имени) ведь поле userId это поидее поле по которому мапятся коробки к юзеру (указано в анатации)
public interface GrowBoxRepo extends JpaRepository<GrowBox, Long> {
List<GrowBox> findByUserId(Long userId);
}
и тут уже все это дело падает мол нет проперти в гровбоксе для ЮзерАйди
вот стактрейс
Error creating bean with name 'requestMappingHandlerAdapter' defined in class path resource
Error creating bean with name 'mvcConversionService' defined in class path resource
Error creating bean with name 'growBoxRepo': Invocation of init method failed; nested exception ....
Failed to create query for method public abstract java.util.List com.example.auth.repo.GrowBoxRepo.findByUserId(java.lang.Long)! No property userId found for type GrowBox!
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property userId found for type GrowBox!
с одной стороны это потому что нет поля Юзерайди в коробке , но с другой стороны оно же там есть , объявлено в анатации и если создать еще поле с таким именем , то он выдаст мол есть 2 одинаковых поля в sql таблице или чет такое
заранее спасибо