Java 是你。Ayo将存储库注入到服务中,但您可以将其注入到任何您想要的地方(例如控制器),并围绕对存储库自动生成方法的调用添加您的业务逻辑。@Pytry请看下面我的答案。 @MappedSuperclass public class AbstractEntity
Java 是你。Ayo将存储库注入到服务中,但您可以将其注入到任何您想要的地方(例如控制器),并围绕对存储库自动生成方法的调用添加您的业务逻辑。@Pytry请看下面我的答案。 @MappedSuperclass public class AbstractEntity,java,spring,spring-boot,spring-data-jpa,Java,Spring,Spring Boot,Spring Data Jpa,是你。Ayo将存储库注入到服务中,但您可以将其注入到任何您想要的地方(例如控制器),并围绕对存储库自动生成方法的调用添加您的业务逻辑。@Pytry请看下面我的答案。 @MappedSuperclass public class AbstractEntity implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) protected Long id; protecte
是你。Ayo将存储库注入到服务中,但您可以将其注入到任何您想要的地方(例如控制器),并围绕对存储库自动生成方法的调用添加您的业务逻辑。@Pytry请看下面我的答案。
@MappedSuperclass
public class AbstractEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
protected boolean enabled = true;
//equals, hashcode...
}
public class Professor extends AbstractEntity{
private String email;
}
public class Course extends AbstractEntity {
@ManyToOne(optional = false)
private Professor professor;
}
public class Question extends AbstractEntity {
@ManyToOne(optional = false)
private Course course;
}
public interface CourseRepository extends PagingAndSortingRepository<Course, Long> {
@Query("select c from Course c where c.id = ?1 and c.professor = ?#{principal.professor} and c.enabled = true")
Course findOne(Long id);
}
public interface CustomPagingAndSortRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
@Override
@Query("select e from #{#entityName} e where e.id = ?1 and e.professor = ?#{principal.professor} and e.enabled = true")
T findOne(ID id);
//More fields overrided here
}
public interface CourseRepository extends PagingAndSortingRepository<Course, Long> {
Course findByIdAndProfessorAndEnabled(Long id, Professor professor, Boolean enabled);
}
@Service
public class CourseService{
@Autowired
CourseRepository courseRepository;
//pass in principal.professor from your controller or from wherever this is called
public Course findByIdAndProfessorAndEnabled(Long id, Professor professor, Boolean enabled){
return courseRepository.findByIdAndProfessor(id, professor, enabled);
}
}
@MappedSuperclass
@Where(clause="is_enabled=true")
public class AbstractEntity implements Serializable {
.
.
.
@Column(name="is_enabled")
protected boolean enabled = true;
...
@MappedSuperclass
public class AbstractEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@Column(columnDefinition = "boolean default true", nullable = false)
private boolean enabled = true;
// ...
}
@Entity
public class Course extends AbstractEntity {
private String name;
@ManyToOne(optional = false)
private Professor professor;
//...
}
@Entity
public class Question extends AbstractEntity {
private String title;
@ManyToOne(optional = false)
private Course course;
@ManyToOne(optional = false)
private Professor professor;
// ...
}
@NoRepositoryBean
public interface CustomPagingAndSortRepository<T extends AbstractEntity, ID extends Long>
extends PagingAndSortingRepository<T,ID> {
@Override
@Query("select e from #{#entityName} e where e.professor = ?#{principal.professor} and e.enabled = true")
Iterable<T> findAll(Sort sort);
@Override
@Query("select e from #{#entityName} e where e.professor = ?#{principal.professor} and e.enabled = true")
Page<T> findAll(Pageable pageable);
@Override
@Query("select e from #{#entityName} e where e.id =?1 and e.professor = ?#{principal.professor} and e.enabled = true")
T findOne(Long id);
@Override
default boolean exists(Long id){
return findOne(id) != null;
}
@Override
@Query("select e from #{#entityName} e where e.professor = ?#{principal.professor} and e.enabled = true")
Iterable<T> findAll();
@Override
@Query("select e from #{#entityName} e where e.professor = ?#{principal.professor} and e.enabled = true")
Iterable<T> findAll(Iterable<ID> iterable);
@Override
@Query("select count(e) from #{#entityName} e where e.professor = ?#{principal.professor} and e.enabled = true")
long count();
@Override
@Transactional
@Modifying
@Query("update #{#entityName} e set e.enabled=false where e.id=?1 and e.professor = ?#{principal.professor}")
void delete(Long id);
@Override
@Transactional
@Modifying
default void delete(T t){
delete(t.getId());
}
@Override
@Transactional
@Modifying
default void delete(Iterable<? extends T> iterable){
iterable.forEach(entity -> delete(entity.getId()));
}
@Override
@Transactional
@Modifying
@Query("update #{#entityName} e set e.enabled=false where e.professor = ?#{principal.professor}")
void deleteAll();
}
public interface QuestionRepository extends CustomPagingAndSortRepository<Question, Long> {
@Query("select q from Question q where q.course.id = ?1 and q.title like %?2% and q.professor = ?#{principal.professor} and q.enabled = true")
List<Question> listQuestionsByCourseAndTitle(long courseId, String title);
}