我的模型和接口有什么问题? (Java Spring 启动 webapp)
What is wrong with my Model and Interface? (Java Spring Boot webapp)
我在 运行 期间遇到一个错误,它说(为简洁起见省略了完整目录:
Error creating bean with name 'idea_Service' defined in file
[...com\vincentsnow\brightideas\services\Idea_Service.class]:
Unsatisfied dependency expressed through constructor parameter 0;
nested exception is
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'idea_Repository': Invocation of init method
failed; nested exception is java.lang.IllegalArgumentException: Not a
managed type: class java.lang.Object
还有一个:
Error creating bean with name 'idea_Repository': Invocation of init
method failed; nested exception is java.lang.IllegalArgumentException:
Not a managed type: class java.lang.Object
我没有在任何地方使用过这些小写名称。我无法理解此消息...我猜它正在尝试编译但由于某种原因更改了文件名。 STS 在我的文件中没有发现任何错误。他们在这里:
Idea_Service.java(服务)
package com.vincentsnow.brightideas.services;
import java.util.List;
import org.springframework.stereotype.Service;
import com.vincentsnow.brightideas.models.Idea;
import com.vincentsnow.brightideas.models.User;
import com.vincentsnow.brightideas.repositories.Idea_Repository;
@Service
public class Idea_Service {
private Idea_Repository ideaRepository;
public Idea_Service(Idea_Repository ideaRepository){
this.ideaRepository = ideaRepository;
}
public List<Idea> allIdeas(){
return ideaRepository.findAllIdeas();
}
public void createUser(String idea, User posted_by){
ideaRepository.save(idea, posted_by);
}
public Idea oneIdea(Long id) {
return ideaRepository.getSingleIdeaWhereId(id);
}
public List<Idea> likesof(Long id){
return ideaRepository.getLikesOfIdea(id);
}
}
Idea.java(型号)
package com.vincentsnow.brightideas.models;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.validation.constraints.Size;
import com.vincentsnow.brightideas.models.User;
@Entity
public class Idea {
@Id
@GeneratedValue
private Long id;
@Column
@Size(min=3, max=5000)
private String idea;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="idea_id")
private User posted_by;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "likes",
joinColumns = @JoinColumn(name = "idea_id"),
inverseJoinColumns = @JoinColumn(name = "user_id")
)
private List<Idea> likes;
}
Idea_Repository.java(存储库)
package com.vincentsnow.brightideas.repositories;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.vincentsnow.brightideas.models.Idea;
import com.vincentsnow.brightideas.models.User;
@Repository
public interface Idea_Repository extends CrudRepository {
@Query("SELECT a FROM ideas a")
List<Idea> findAllIdeas();
@Query(value="INSERT INTO ideas (idea, posted_by) VALUES (?1, ?2, ?3, ?4)", nativeQuery=true)
Idea save(String idea, User posted_by);
@Query("SELECT a FROM ideas a WHERE id=?1")
Idea getSingleIdeaWhereId(Long id);
@Query(value="SELECT likes WHERE idea_id = ?1", nativeQuery=true)
List<Idea> getLikesOfIdea(Long id);
}
他们怎么了?这个错误是什么意思? STS 试图做什么?
CrudRepository
有两个形参,一个是它管理的类型,另一个是该类型的 ID 类型。由于您没有提供这些参数,它们实际上是 Object
和 Object
:错误消息指出 Object
不是可管理的对象(它没有注释 @Entity
).您需要告诉 Spring 数据,您的存储库 class 实际上试图管理的是 Idea
。尝试:
public interface Idea_Repository extends CrudRepository<Idea, Long> {
// ..
}
此外,您不需要 findAllIdeas
、save
或 getSingleIdeaWhereId
; Spring Data JPA 免费提供等效方法。
我在 运行 期间遇到一个错误,它说(为简洁起见省略了完整目录:
Error creating bean with name 'idea_Service' defined in file [...com\vincentsnow\brightideas\services\Idea_Service.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'idea_Repository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object
还有一个:
Error creating bean with name 'idea_Repository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object
我没有在任何地方使用过这些小写名称。我无法理解此消息...我猜它正在尝试编译但由于某种原因更改了文件名。 STS 在我的文件中没有发现任何错误。他们在这里:
Idea_Service.java(服务)
package com.vincentsnow.brightideas.services;
import java.util.List;
import org.springframework.stereotype.Service;
import com.vincentsnow.brightideas.models.Idea;
import com.vincentsnow.brightideas.models.User;
import com.vincentsnow.brightideas.repositories.Idea_Repository;
@Service
public class Idea_Service {
private Idea_Repository ideaRepository;
public Idea_Service(Idea_Repository ideaRepository){
this.ideaRepository = ideaRepository;
}
public List<Idea> allIdeas(){
return ideaRepository.findAllIdeas();
}
public void createUser(String idea, User posted_by){
ideaRepository.save(idea, posted_by);
}
public Idea oneIdea(Long id) {
return ideaRepository.getSingleIdeaWhereId(id);
}
public List<Idea> likesof(Long id){
return ideaRepository.getLikesOfIdea(id);
}
}
Idea.java(型号)
package com.vincentsnow.brightideas.models;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.validation.constraints.Size;
import com.vincentsnow.brightideas.models.User;
@Entity
public class Idea {
@Id
@GeneratedValue
private Long id;
@Column
@Size(min=3, max=5000)
private String idea;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="idea_id")
private User posted_by;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "likes",
joinColumns = @JoinColumn(name = "idea_id"),
inverseJoinColumns = @JoinColumn(name = "user_id")
)
private List<Idea> likes;
}
Idea_Repository.java(存储库)
package com.vincentsnow.brightideas.repositories;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.vincentsnow.brightideas.models.Idea;
import com.vincentsnow.brightideas.models.User;
@Repository
public interface Idea_Repository extends CrudRepository {
@Query("SELECT a FROM ideas a")
List<Idea> findAllIdeas();
@Query(value="INSERT INTO ideas (idea, posted_by) VALUES (?1, ?2, ?3, ?4)", nativeQuery=true)
Idea save(String idea, User posted_by);
@Query("SELECT a FROM ideas a WHERE id=?1")
Idea getSingleIdeaWhereId(Long id);
@Query(value="SELECT likes WHERE idea_id = ?1", nativeQuery=true)
List<Idea> getLikesOfIdea(Long id);
}
他们怎么了?这个错误是什么意思? STS 试图做什么?
CrudRepository
有两个形参,一个是它管理的类型,另一个是该类型的 ID 类型。由于您没有提供这些参数,它们实际上是 Object
和 Object
:错误消息指出 Object
不是可管理的对象(它没有注释 @Entity
).您需要告诉 Spring 数据,您的存储库 class 实际上试图管理的是 Idea
。尝试:
public interface Idea_Repository extends CrudRepository<Idea, Long> {
// ..
}
此外,您不需要 findAllIdeas
、save
或 getSingleIdeaWhereId
; Spring Data JPA 免费提供等效方法。