这个问题是关于一个Spring MVC项目的,在这个项目中,我确实将Hibernate与JPA一起使用。对于消息是一个实体类
import java.io.Serializable;
import java.time.LocalDate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "StoredMessage")
public class StoredMessage implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long messageId;
@Column(nullable = false)
private Long userId;
@Column(nullable = false)
private String message;
@Column(nullable = false)
private LocalDate date;
@ManyToOne
private User user;
public StoredMessage() {
super();
}
public StoredMessage(Long messageId, Long userId, String message, LocalDate date) {
super();
this.messageId = messageId;
this.userId = userId;
this.message = message;
this.date = date;
}
public Long getMessageId() {
return messageId;
}
public void setId(Long messageId) {
this.messageId = messageId;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public LocalDate getDate() {
return date;
}
public void setDate(LocalDate date) {
this.date = date;
}
}
为了执行一些简单的查询,使用了一个从JPararePository派生的接口。
import org.springframework.data.jpa.repository.JpaRepository;
import free.oauth.model.StoredMessage;
public interface MessageRepository extends JpaRepository<StoredMessage, Long> {
public void saveStoredMessage(StoredMessage message);
public void delete(Long MessageId);
public boolean findByMessageId(Long mesageId);
public StoredMessage findStoredMessageByMessageId(Long mesageId);
public boolean update(StoredMessage mesage);
}
通过运行project its获取错误,如
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property saveStoredMessage found for type StoredMessage!
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:77)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:329)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:309)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:272)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:243)
at org.springframework.data.repository.query.parser.Part.<init>(Part.java:76)
at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:235)
at org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:373)
at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:353)
at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:84)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:63)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:103)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:214)
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:77)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:435)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:220)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:266)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:252)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 56 more
这种接口有什么问题,在这种类型的接口中必须遵守规则?
关于保存和删除,它们是开箱即用的支持,并且已经存在于界面中:
void delete(T entity)
<S extends T> S save(S entity)
这两个都定义在JpaRepository扩展的CrudRepository接口上。
关于update,在事务完成后,对查询的任何更新都将被刷新到数据库中。
如果您想要显式更新,那么试试下面的文章:How do I update an entity using spring-data-jpa?
更新
取而代之的是:
public StoredMessage findStoredMessageByMessageId(Long mesageId);
您可以使用
StoredMessage findOne(long messageId)
也来自CrudRepository接口
最后,如果您想通过某个字段而不是id来搜索唯一的实体,那么如下所示:
StoredMessage findOneStoredMessageByMessage(String message);
问题内容: 我正在尝试从C#查询SQL Server数据库 我有课 我的查询中有问题。 当我给普通查询“从表中选择*”时,这给了我完美的结果。 但是当我尝试给出条件时,它给了我错误。有什么建议可以解决吗?谢谢。 问题答案: 钿狅笍 警告 此答案包含一个SQL注入安全漏洞。不要使用它。如该问题的其他一些答案所述(例如,Tony Hopkinson的答案),请考虑使用参数化查询。 尝试在where子句
问题内容: 该表包含一个ID列,valueHeading列和一个value列。我想将value列分为两个新列,分别称为valueHeading1和valueHeading2,具体取决于值具有哪种valueHeading类型。 所以我想加入这个选择: 编辑:完全加入 使用此选择: 在各自的ID上。我该怎么做呢? 编辑 以说明我要执行的操作: 原始表格: 新表: 问题答案: 在SQLServer200
我在文件夹中: 其中保留了一些简单的X查询STMT,以便通过Saxon X查询引擎执行...(Saxon 9.4 HE) 以下声明: 给出: 但下面的语句很管用: ?!?! 与类加载器有关..??许可..??小天鹅?嗯... 非常感谢你指出这个小天鹅的行为! 但奇怪的是,当我也试图通过我的Eclipse(Indigo)在Mac OS Lion上运行Xquery时,我遇到了这个(与上面完全相同),通
我有一个JAX-WS导入的WSDL客户机。当我尝试连接到webserviceendpoint时,JAX-WS客户端尝试加载WSDL。为什么? 我不想在我的项目中存储WSDL, 我不想再次从webservice URL加载WSDL? 问题: 有机会绕过这种行为吗? 如何在运行时添加webserviceendpointURL? 添加具有相同QName和端口名的端口失败,因为我无法添加相同的QName和
如果可能的话,我想使用一个自定义函数来对结果进行排序。在Spring JPA中处理这类事情的最佳方法是什么?我如何使我的存储库使用我的函数对结果集进行排序?