- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下简单的 Spring Boot 代码。为什么我的 JPARepositoryImpl 代码 - JpaCustomerRepository 没有被调用(我通过添加 print 语句知道..)?
我在主 Controller 和 Controller 中添加了@ComponentScan。请指教。
谢谢
@Entity
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String product;
@Column(nullable = false)
private String charge;
protected Customer() {
}
public Customer(String product) {
this.product = product;
}
public Long getId() {
return id;
}
public String getProduct() {
return this.product;
}
public String getCharge() {
return this.charge;
}}
public interface CustomerRepository extends Repository<Customer, Long> {
List<Customer> findAll();
}
@Repository
class JpaCustomerRepository implements CustomerRepository {
@PersistenceContext
private EntityManager em;
@Override
public List<Customer> findAll() {
TypedQuery<Customer> query = em.createQuery("select c from Customer c",
Customer.class);
return query.getResultList();
}
}
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class SampleDataJpaApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleDataJpaApplication.class, args);
}
}
@Controller
@ComponentScan
@RequestMapping("/customers")
public class SampleController {
private CustomerRepository customerRepository;
@Autowired
public SampleController(CustomerRepository customerRepository) {
this.customerRepository = customerRepository;
}
@RequestMapping("/list")
public String list(Model model) {
model.addAttribute("customers", this.customerRepository.findAll());
return "customers/list";
}
}
但是 Spring Data 书中的示例代码 (JpaCustomerRepository) 确实被调用了。有什么问题吗?
@MappedSuperclass
public class AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
/**
* Returns the identifier of the entity.
*
* @return the id
*/
public Long getId() {
return id;
}
/*
* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (this.id == null || obj == null || !(this.getClass().equals(obj.getClass()))) {
return false;
}
AbstractEntity that = (AbstractEntity) obj;
return this.id.equals(that.getId());
}
/*
* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return id == null ? 0 : id.hashCode();
}
}
@Entity
public class Customer extends AbstractEntity {
private String firstname, lastname;
@Column(unique = true)
private EmailAddress emailAddress;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "customer_id")
private Set<Address> addresses = new HashSet<Address>();
/**
* Creates a new {@link Customer} from the given firstname and lastname.
*
* @param firstname must not be {@literal null} or empty.
* @param lastname must not be {@literal null} or empty.
*/
public Customer(String firstname, String lastname) {
Assert.hasText(firstname);
Assert.hasText(lastname);
this.firstname = firstname;
this.lastname = lastname;
}
protected Customer() {
}
/**
* Adds the given {@link Address} to the {@link Customer}.
*
* @param address must not be {@literal null}.
*/
public void add(Address address) {
Assert.notNull(address);
this.addresses.add(address);
}
/**
* Returns the firstname of the {@link Customer}.
*
* @return
*/
public String getFirstname() {
return firstname;
}
/**
* Returns the lastname of the {@link Customer}.
*
* @return
*/
public String getLastname() {
return lastname;
}
/**
* Sets the lastname of the {@link Customer}.
*
* @param lastname
*/
public void setLastname(String lastname) {
this.lastname = lastname;
}
/**
* Returns the {@link EmailAddress} of the {@link Customer}.
*
* @return
*/
public EmailAddress getEmailAddress() {
return emailAddress;
}
/**
* Sets the {@link Customer}'s {@link EmailAddress}.
*
* @param emailAddress must not be {@literal null}.
*/
public void setEmailAddress(EmailAddress emailAddress) {
this.emailAddress = emailAddress;
}
/**
* Return the {@link Customer}'s addresses.
*
* @return
*/
public Set<Address> getAddresses() {
return Collections.unmodifiableSet(addresses);
}
}
public interface CustomerRepository extends Repository<Customer, Long> {
/**
* Returns the {@link Customer} with the given identifier.
*
* @param id the id to search for.
* @return
*/
Customer findOne(Long id);
/**
* Saves the given {@link Customer}.
*
* @param customer the {@link Customer} to search for.
* @return
*/
Customer save(Customer customer);
/**
* Returns the customer with the given {@link EmailAddress}.
*
* @param emailAddress the {@link EmailAddress} to search for.
* @return
*/
Customer findByEmailAddress(EmailAddress emailAddress);
}
@Repository
class JpaCustomerRepository implements CustomerRepository {
@PersistenceContext
private EntityManager em;
/*
* (non-Javadoc)
* @see com.oreilly.springdata.jpa.core.CustomerRepository#findOne(java.lang.Long)
*/
@Override
public Customer findOne(Long id) {
return em.find(Customer.class, id);
}
/*
* (non-Javadoc)
* @see com.oreilly.springdata.jpa.core.CustomerRepository#save(com.oreilly.springdata.jpa.core.Customer)
*/
public Customer save(Customer customer) {
if (customer.getId() == null) {
em.persist(customer);
return customer;
} else {
return em.merge(customer);
}
}
/*
* (non-Javadoc)
* @see com.oreilly.springdata.jpa.core.CustomerRepository#findByEmailAddress(com.oreilly.springdata.jpa.core.EmailAddress)
*/
@Override
public Customer findByEmailAddress(EmailAddress emailAddress) {
TypedQuery<Customer> query = em.createQuery("select c from Customer c where c.emailAddress = :email",
Customer.class);
query.setParameter("email", emailAddress);
return query.getSingleResult();
}
}
原代码测试方法,
@ContextConfiguration(classes = PlainJpaConfig.class)
public class JpaCustomerRepositoryIntegrationTest extends AbstractIntegrationTest {
@Autowired
CustomerRepository repository;
@Test
public void insertsNewCustomerCorrectly() {
Customer customer = new Customer("Alicia", "Keys");
customer = repository.save(customer);
assertThat(customer.getId(), is(notNullValue()));
}
@Test
public void updatesCustomerCorrectly() {
Customer dave = repository.findByFirstname("Dave");
assertThat(dave, is(notNullValue()));
dave.setLastname("Miller");
dave = repository.save(dave);
Customer reference = repository.findByFirstname(dave.getFirstname());
assertThat(reference.getLastname(), is(dave.getLastname()));
}
}
我的主要方法代码,
@Configuration
@ComponentScan
@EnableAutoConfiguration
@ContextConfiguration(classes = PlainJpaConfig.class)
public class SampleDataJpaApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleDataJpaApplication.class, args);
}
}
我有额外的@EnableAutoConfiguration,而原始代码没有?难道是这个原因吗?但是如果没有@EnableAutoConfiguration,我将无法启动Spring Boot Container。
最佳答案
您的代码不会被调用,因为 Spring Data 正在动态提供 CustomerRepository 的实现。您的代码是多余的(从某种意义上说,它没有执行 Spring Data 无法自动执行的操作),但如果您想了解如何使用 Spring Data 无法自动生成的代码来增强 Spring Data 提供的实现,请查看documentation .
关于java - 为什么我的 JPA Repository Impl 代码没有被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22881448/
在过去的几个月里,我一直在使用 Bzr 对我的项目进行版本控制。我是唯一的开发人员,目前我只有一个本地项目目录中的所有内容,我提交并同步到 DriveHQ。 我现在想到了一些可能会打破这条主线的大规模
我在一个多模块项目中使用 Maven 3.2.3。我想生成一个 checkstyle 和 findbugs 报告,所以我配置了以下内容:
我注意到 Repository 通常通过以下任一方式实现: 方法一 void Add(object obj); void Remove(object obj); object GetBy(int id
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
这是我的设置的详细信息: Gitlab 版本:5.2操作系统:Centos 6.3我在创建新项目 (/projects/new) 时导入现有存储库。 创建了一个新的 EMPTY 项目,但是没有导入存储
我的文件夹结构如下: repo1 | |---file1 |---fold1 | |---file2 |---repo2 | | |---file3 假设我有两
假设我有一个 TeacherRepository,需要根据下面的代码使用 CourseRepository。 Teacher 和 Course 形成多对多的关系。教师和类(class)不形成聚合。您会
我要同样的 repositories我在 buildscript.repositories 中指定的阻止与依赖项相同的存储库 repositories堵塞。请看我的例子: 正常 buidldscrip
是否使用 @EnableJpaRepositories 或 jpa:repositories(在 xml 上)让开发人员不要使用 Spring 的 @Repository 标签?当我查看 Spring
我是 git 和 Github 的新手。我已经了解了很多术语(推送、 pull 、提交、分支等),但我将主要使用通俗的说法来解释我最初的期望。 我假设过程是: 1.) Create a git rep
安装 Nexus Repository Manager OSS 3 后,我没有看到用于通过网页上传工件的选项Artifact Upload。 在 Nexus Repository Manager OS
CMS 和 DMS 有什么区别?两者都存储日期,可以访问数据,它们有什么不同?可以使用 apache Jack Rabbit 代替 Alfresco 吗? 最佳答案 我会根据管理数据的可变性来区分这两
在我的earlier question我问的是如何为使用 EF 等 ORM 框架构建的大型应用程序实现存储库/工作单元模式。 我现在无法解决的一个后续问题是将包含业务逻辑的代码放在哪里,但仍然足够低级
我正在尝试为 nuget git 存储库(我刚刚从中克隆)创建 pull 请求。我已经进行了本地提交。 但是当我尝试创建 pull 请求时,出现以下错误: Could not find any rel
我已经看到了下面的问题。 git diff between cloned and original remote repository 我的问题是如何在 SourceTree 中看到这个差异结果(而不
我在通过 Subversion (SVN) 中的 checkin 自动在 Review Board 中创建新的评论条目时遇到了困难。我创建了一个提交后 Hook ,当手动运行时会出现以下异常: Fai
我在尝试集成 Spring Data 时遇到此错误。完整的堆栈跟踪是 nested exception is org.xml.sax.SAXParseException; systemId: http
通知:https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-repository-email.html 触发器:https://
我正在学习 Laravel 中的存储库设计模式,我正在使用 https://github.com/andersao/l5-repository去做这件事。 但是在我将文件夹 prettus 复制/粘贴
我最近开始了一个使用现有数据库(Oracle)和 MVC 4 的项目。已经进行了很多编码..但是代码中没有“策略”..只有 DB -> ORM -> Controller。因此,我正在尝试为开发添加一
我是一名优秀的程序员,十分优秀!