搜索了几个小时,但我陷入了PlayAramework与JPA的学习曲线.我正在建立一个可以发布帖子的示例网站.但这些帖子可以具有以下状态:
这些状态存储在单独的表中.显然,国家职位草案尚不可见.
所以我有这些课程:
在我的页面课程中,我有:
@Column(name="POSTS_REF")
@Where(clause="PostPublished")
private List<Posts> userPosts;
Run Code Online (Sandbox Code Playgroud)
但这不起作用!那么,我如何指定where子句,只加载处于已发布状态的帖子而不使用JPQL?
谢谢!
更新时间:2011-10-11
表:具有列的帖子: - id - title - state_ref(对States表的ID的引用) - 内容
表:美国与列: - ID - Statename的
所以我想说的是:
select *
from posts inner join states on posts.state_ref = states.id
where states.statename = 'PostPublished'
Run Code Online (Sandbox Code Playgroud)
更新2011-10-13
这是我目前的修改,在我的页面类中:但它也不起作用.
/** link to the states */
@JoinColumn(name = "STATES_REF")
@OneToOne
@Where(clause = "states.statename = 'PostPublished'")
public MyState state;
Run Code Online (Sandbox Code Playgroud)
更新2012-02-13 Emt的回答毕竟对我有用.
I've got a simple RequestMapping
method that returns a list of Users
, the Users
model has a ONE TO MANY
relation to HolidayDates
...I'm just playing around with it, so I've chosen holiday dates as the relation (list of dates they went on a holiday).
So ONE
user can have MANY
related Dates
.
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="userId")
private int userId;
@Column(name="about")
private String about;
// Maybe change to fetchtype eager
@OneToMany(fetch …
Run Code Online (Sandbox Code Playgroud) 我试图像这样制作一个hibernate实体A的副本:
A a = (A) session.get(A.class, id);
session.evict(a);
a.setId(null);
session.save(a);
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用,我获得以下期望:
org.hibernate.HibernateException: Don't change the reference to a collection with cascade="all-delete-orphan": com.test.A.B
Run Code Online (Sandbox Code Playgroud)
因为我有一个在实体A中定义的B实体的集合,所以可以安全地假设发生此错误:
<list name="B" table="B" lazy="false" cascade="all,delete-orphan">
<key column="A_ID" not-null="true"/>
<index column="X"/>
<one-to-many class="com.test.B"/>
</list>
Run Code Online (Sandbox Code Playgroud)
怎么可能制作一个实体A的副本,包括它的实体B的集合,而没有hibernate对它不满意?
我似乎无法在以下任何位置映射我的存储库:
@RepositoryRestResource(collectionResourceRel = "item", path = "item")
public interface ItemRepository extends PagingAndSortingRepository<Item, Long> {
Run Code Online (Sandbox Code Playgroud)
我以为我可以用:
path = "/some/other/path/item"
Run Code Online (Sandbox Code Playgroud)
但映射无法解决.我明白了:
HTTP ERROR 404
Problem accessing /some/other/path/item. Reason:
Not Found
Run Code Online (Sandbox Code Playgroud)
在spring-data中,javadoc path
定义为:"用于导出此资源的路径段."
我究竟做错了什么?
现在我有一个类User,我array
从jsp
或获得了一个请求数据html
.
列出这个 Integer[] arr=[5,6,9,10,62,52,21]
然后我使用两种方法来完成膨胀删除操作.
@Transactional
@Override
public void deleteUser(Integer id) {
oneRepository.delete(id);
}
@Transactional
@Override
public void deleteSomeUser(Integer[] ids) {
for (Integer id : ids) {
deleteUser(id);
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道如果这是一种更有效的方法来完成这个动作.
你可以看到我的日志:它似乎不太好!
[94, 95, 91, 92, 93]
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
delete
from
sshh_user
where
ID=?
Hibernate:
select
count(practice0_.ID) as col_0_0_
from
sshh_user …
Run Code Online (Sandbox Code Playgroud) 我使用Spring data
了我的项目,我使用的是标准的Repository
那extends CRUD Repository
.
我的代码按预期工作,但是当我调用repository.save()
数据库时没有改变?
我是否还需要commit
在此之后调用一个以便更改数据库?或者该repository.save()
方法是否应自动更改数据库?
我在Spring服务中存在持久性问题.休息控制器R接收请求,并通过一些代码层以复杂的方式调用服务S. S中的服务方法声明一个事务; 这应该是第一次启动交易.但是服务的行为就像之前已经启动的事务一样,并且我的一些数据对象将成为会话的一部分(他们不能这样做).如何确定交易是否已处于活动状态?我试图注入EntityManager和/或JpaTransactionManager; 但两者似乎没有任何帮助.
如何检查我是否在交易中?
在我寻找可能的嫌疑人的所有这些层次之前,我想确定这一点.
我们@RepositoryRestResource
在PagingAndSortingRepository
连接到postgres数据库的顶部使用了一个非常简单的设置.我们还配置spring.jackson.property-naming-strategy=SNAKE_CASE
了返回漂亮的json.在我们开始排序之前,这一切都很好,很花哨.正如我们所发现的 - 排序要求我们提供实际的类字段名称(我们当然在驼峰的情况下):
get("/thing?sort=dateCreated,desc")
当我们尝试javascript友好
get("/thing?sort=date_created,desc")
它失败了,因为jpa试图用下划线拆分参数.
是否有一种简单的方法让路径params与我们在json中返回的格式相同?
我正在使用JPA开发Spring Boot v1.4.2.RELEASE应用程序.
我定义了存储库接口和实现
ARepository
@Repository
public interface ARepository extends CrudRepository<A, String>, ARepositoryCustom, JpaSpecificationExecutor<A> {
}
Run Code Online (Sandbox Code Playgroud)
ARepositoryCustom
@Repository
public interface ARepositoryCustom {
Page<A> findA(findAForm form, Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)
ARepositoryImpl
@Repository
public class ARepositoryImpl implements ARepositoryCustom {
@Autowired
private ARepository aRepository;
@Override
public Page<A> findA(findAForm form, Pageable pageable) {
return aRepository.findAll(
where(ASpecs.codeLike(form.getCode()))
.and(ASpecs.labelLike(form.getLabel()))
.and(ASpecs.isActive()),
pageable);
}
}
Run Code Online (Sandbox Code Playgroud)
和服务 AServiceImpl
@Service
public class AServiceImpl implements AService {
private ARepository aRepository;
public AServiceImpl(ARepository aRepository) {
super();
this.aRepository = aRepository;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序不会以消息开头: …
我的预备语句有问题,但我无法弄清楚错误的位置.我试图将URI链接插入数据库.
@Repository
public interface LoggerDao extends CrudRepository<Logger, Long> {
@Query("select t from Logger t where t.user.id=?#{principal.id}")
List<Logger> findAll();
@Modifying
@Query(value = "insert into Logger t (t.redirect, t.user.id) VALUES (:insertLink,?#{principal.id})", nativeQuery = true)
@Transactional
void logURI(@Param("insertLink") String insertLink);
Run Code Online (Sandbox Code Playgroud)
错误
2017-03-11 19:52:59.157 WARN 65154 --- [nio-8080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 42001, SQLState: 42001
2017-03-11 19:52:59.157 ERROR 65154 --- [nio-8080-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : Syntax error in SQL statement "INSERT INTO LOGGER T[*] (T.REDIRECT, T.USER.ID) VALUES (?,?) "; expected "., (, DIRECT, SORTED, DEFAULT, VALUES, …
Run Code Online (Sandbox Code Playgroud) java ×8
spring ×5
spring-data ×4
hibernate ×3
spring-boot ×3
json ×2
jackson ×1
jpa ×1
repository ×1
spring-mvc ×1
sql ×1
transactions ×1