小编nas*_*jai的帖子

Spring Data JPA 可分页 @ManyToMany

我有PostTag具有@manytomany 关系的模型。

邮政

@Entity
public class Post {
     private long id;

     @ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
     @JoinTable(joinColumns = @JoinColumn(name = "post_id"), inverseJoinColumns = @JoinColumn(name = "tag_id"))
     private Set<Tag> tags;

     ...
}
Run Code Online (Sandbox Code Playgroud)

标签

@Entity
public class Tag {
     private String name;

     @ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "tags")
     private List<Post> posts = new ArrayList<Post>();
Run Code Online (Sandbox Code Playgroud)

我想创建一个方法,通过标签名称查找所有分页的帖子。

我发现 JPQL 不支持LIMIT.

我是否必须使用 实现我自己的分页逻辑setFirstResult().setMaxResults().getResultList()

@manytomany 分页的最佳做法是什么?

我稍微编辑了我的问题。我写了我的代码,如下所示:

@SuppressWarnings("unchecked") …
Run Code Online (Sandbox Code Playgroud)

java spring-data spring-data-jpa

6
推荐指数
2
解决办法
3716
查看次数

spring 自动装配失败,@Transactional

我想在 UserService(具体类)的 save() 方法中使用 @Transactional 注释,如下所示:

@Service
public class UserService {

    @Transactional
    public Long save(User userCommand, BindingResult result) {
    ...
    }

}
Run Code Online (Sandbox Code Playgroud)

我将通过自动装配在 MyRealm 中使用此服务。

public class MyRealm extends AuthorizingRealm {

    @Autowired
    private UserService userService;

}
Run Code Online (Sandbox Code Playgroud)

但是,它失败并出现以下错误:

java.lang.IllegalArgumentException: Can not set n.r.c.s.user.UserService field n.r.c.s.realm.MyRealm.userService to com.sun.proxy.$Proxy48
Run Code Online (Sandbox Code Playgroud)

当然,如果我删除 @Transational 注释,它会起作用。

我的事务管理器设置如下:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />
Run Code Online (Sandbox Code Playgroud)

请让我知道我的代码有什么问题?

我需要设置代理之类的东西吗?

spring jpa proxy-classes

4
推荐指数
1
解决办法
1687
查看次数

django admin list_display 带有计数注释

我想将“注释计数”字段添加到 Django Admin 中的 list_display 中。

模型.py

class Log(models.Model):
    ...
    ip_address = models.GenericIPAddressField(
        verbose_name=_('IP address'),
        db_index=True,
    )
    ...
Run Code Online (Sandbox Code Playgroud)

管理员.py

class LogAdmin(admin.ModelAdmin):
    list_display = (..., 'ip_address', 'ip_address_count', ...)

    def ip_address_count(self, instance):
        return models.Log.objects \
            .filter(ip_address=instance.ip_address) \
            .count()

    ip_address_count.short_description = _('IP Address Count')
Run Code Online (Sandbox Code Playgroud)

它可以很好地处理“大量”SQL 查询。

admin.py我想像这样改进我的:

class Log(models.Model):
    ...

    def get_queryset(self, request):
        qs = super(LogAdmin, self).get_queryset(request)
        qs = qs.values('ip_address') \
               .annotate(ip_address_count=Count('ip_address'))
        return qs

    def ip_address_count(self, instance):
        return instance.ip_address_count
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了错误消息:

'dict' object has no attribute '_meta'

看来我找到了错误发生的原因:

Django 管理员,无法分组依据:异常值:“dict”对象没有属性“_meta”

然而,这并不能帮助我解决问题。

谢谢您的回答。

编辑:如果我不附加 …

python django django-orm django-admin

3
推荐指数
1
解决办法
2310
查看次数