小编Ash*_*yan的帖子

@Indexed嵌套属性不适用于mongo的Spring-data

我有以下对象结构:

@Document(collection = "user")
@TypeAlias("user")
public class User {
    @Id
    private ObjectId id;
    private Contact info = new Contact();
}
Run Code Online (Sandbox Code Playgroud)

这是联系人pojo:

public class Contact {
    @Indexed(unique = true)
    private String mail;
}
Run Code Online (Sandbox Code Playgroud)

但由于我不知道的一些原因,我没有看到Spring-data为属性info.mail创建一个唯一的索引

总而言之,我有这个用户对象的json结构: {_ id:xxxxx,info:{mail:"abc@xyz.shoes"}}

我想使用具有上述pojo结构的Spring数据在info.mail上创建一个唯一索引.请帮忙.

java spring mongodb spring-data-mongodb

8
推荐指数
3
解决办法
7908
查看次数

防御性复制Number子类

请考虑以下示例:

public final class ImmutableWrapper<T extends Number> {

    private final T value;

    public ImmutableWrapper(T value) {
        // a subclass of Number may be mutable
        // so, how to defensively copying the value?
        this.value = value;
    }

    public T getValue() {
        // the same here: how to return a copy?
        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

为了使这个类不可变,我必须防御性地复制传递给构造函数的任何可变参数,并创建由公共方法返回的内部可变对象的副本.

这可能吗?如果没有,是否有任何解决方法?

java generics

7
推荐指数
1
解决办法
117
查看次数

Spring Data Rest ManytoMany POST

首先,让我解释一下我的用例.这很直接.有一个用户实体和一个服务实体.我使用UserService作为Joined实体(连接表)在User和Service之间有很多关联.最初,会有一些用户和一些服务集.用户可以随时订阅任何服务.在这种情况下,将向UserService添加一个条目.但是,当我试图创建一个新的UserService关联时,我得到空指针异常.我可以单独创建用户和服务.

我的实体是:User.java

package dao.models;

import java.io.Serializable;
import javax.persistence.*;

import com.fasterxml.jackson.annotation.JsonBackReference;
@Entity
@org.hibernate.annotations.Proxy(lazy=false)
@Table(name="`user`", schema="emm")
public class User implements Serializable {
    public User() {
    }

    @Column(name="id", nullable=false, unique=true) 
    @Id 
    @GeneratedValue(generator="EMM_USER_ID_GENERATOR")  
    @org.hibernate.annotations.GenericGenerator(name="EMM_USER_ID_GENERATOR", strategy="native")    
    private long id;


    @ManyToOne(targetEntity=dao.models.Tenant.class, fetch=FetchType.LAZY)  
    @org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.LOCK})    
    @JoinColumns({ @JoinColumn(name="tenant_id", referencedColumnName="id", nullable=false) })  
    @org.hibernate.annotations.LazyToOne(value=org.hibernate.annotations.LazyToOneOption.NO_PROXY)  
    private dao.models.Tenant tenant;

    @OneToOne(targetEntity=dao.models.Person.class, fetch=FetchType.LAZY)   
    @org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.LOCK}) 
    @JoinColumns({ @JoinColumn(name="Person_id", nullable=false) }) 
    @org.hibernate.annotations.LazyToOne(value=org.hibernate.annotations.LazyToOneOption.NO_PROXY)  
    private dao.models.Person person;

    @Column(name="password", nullable=true, length=255) 
    private String password;

    @Column(name="email", nullable=false, length=255)   
    private String email;

    @Column(name="status", nullable=true, length=255)   
    private String status;

    @ManyToMany(mappedBy="user", targetEntity=dao.models.TenantGroup.class) 
    @org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.LOCK}) …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data-jpa spring-data-rest

7
推荐指数
1
解决办法
5670
查看次数

JPA 2.1/Hibernate 4.3弃用警告

我正在使用JPA 2.1示例应用程序Hibernate 4.3.x实现.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                                http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="unit1">

        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>net.roseindia.model.Product</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/common"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="root"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>

    </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

pom.xml我有以下依赖.

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.3.5.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

示例命令行应用程序正常工作(非常简单)但是在启动它时会收到以下警告消息.

Apr 13, 2014 1:12:43 PM org.hibernate.ejb.HibernatePersistence logDeprecation
WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
Run Code Online (Sandbox Code Playgroud)

那么,这是我的错误配置问题(我可以避免它吗?),或者它是Hibernate实现中的问题?

更新

这是我使用的代码:

import net.roseindia.model.Product;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory; …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa jpa-2.1

7
推荐指数
1
解决办法
2万
查看次数

ClassNotFoundException:org.springframework.web.context.ContextLoaderListener

我在我的项目中面临一些问题,这是一个Spring MVC项目.在这个项目中,对于持久层,我们使用的是Hibernate.

以下是我的web.xml详细信息:

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/beanRefFactory.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此项目时,我收到以下错误:

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:124)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4701)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5260)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1525)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1515)
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

这是我的classpath jar详细信息:

<classpathentry kind="lib" path="WebContent/WEB-INF/lib/hibernate/ant-1.6.5.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/hibernate/ant-antlr-1.6.5.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/hibernate/antlr-2.7.6.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/hibernate/aopalliance-1.0.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/hibernate/asm-attrs.jar"/>
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/hibernate/asm.jar"/>
<classpathentry …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc

6
推荐指数
1
解决办法
8066
查看次数

应用程序管理JPA,何时需要Transaction

我们正在开发一个小网站(将在Tomcat上运行),数据层使用JPA(Eclipselink)完成.我前段时间做过类似的事情.但我总是不确定何时需要开始和结束交易或进行同花.目前我使用事务,如果我添加(持久)和删除对象.如果我在已经持久化的对象上调用setter,则不使用事务.

是否有指南/教程或简短的答案何时使用事务或如何正确实现应用程序管理的JPA.

java jpa jpa-2.0

6
推荐指数
1
解决办法
4786
查看次数

Spring安全配置错误:bean具有相同的'order'值

我在其中我实现的Spring Security我的Web应用程序spring-security.xml就是

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/security
                        http://www.springframework.org/schema/security/spring-security-3.0.xsd">

    <!-- ENABLE HTTP SECURITY -->
    <http auto-config="false" access-denied-page="/accessDenied.html">

        <!-- INTERCEPT URL FOR RESOURCES ACCESS -->
        <intercept-url pattern="/admin/" access="hasRole('ADMIN_ROLE')" />
        <intercept-url pattern="/users/" access="hasRole('USER_ROLE')" />
        <intercept-url pattern="/**" access="permitAll" />

        <!-- CUSTOME FILTER -->
        <custom-filter position="CONCURRENT_SESSION_FILTER" ref="concurrencyFilter" />
        <custom-filter position="FORM_LOGIN_FILTER" ref="AuthFilter" />

        <!-- SESSION MANAGEMENT CONFIG -->
        <session-management
            session-authentication-strategy-ref="session-management" />

        <!-- FORM LOGIN CONFIG -->
        <form-login login-page="/loginForm"
            authentication-failure-url="/error.html" default-target-url="/welcome.html" />
        <logout logout-success-url="/loggedout.html"
            invalidate-session="true" />
    </http>
    <!-- SERVICES  --> …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-security

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

Http Outbound Gateway从pojo有效负载发送Json请求

我正在尝试向REST端点发送一个简单的POST请求.我有一个简单的pojo,我想在有效载荷中发送为JSON.这是pojo(请注意我使用Spring与Grails集成,因此pojo/service在Groovy中):

class Person implements Serializable {
    String name
}
Run Code Online (Sandbox Code Playgroud)

这是我的门户:

public interface PersonGateway {
    Person savePerson(Person person)
}
Run Code Online (Sandbox Code Playgroud)

以下是布线的重要部分:

<int:channel id="requestChannel" />
<int:channel id="responseChannel" />
<int:header-enricher input-channel="requestChannel">
    <int:header name="Content-Type" value="application/json" />
</int:header-enricher>

<int:gateway id="PersonGateway"
             service-interface="com.example.PersonGateway"
             default-request-channel="requestChannel"
             default-reply-channel="responseChannel">
    <int:method name="savePerson" />
</int:gateway>
<int-http:outbound-gateway url="http://127.0.0.1:8000/person"
                           http-method="POST"
                           message-converters="jsonConverter"
                           expected-response-type="com.example.Person"
                           request-channel="requestChannel"
                           extract-request-payload="false"/>
Run Code Online (Sandbox Code Playgroud)

此POST请求永远不会到达该服务,但不会抛出任何异常.当我记录所有级别时,我得到的唯一一个看起来像线索的是:

2014-03-30 16:35:07,313 [main] DEBUG outbound.HttpRequestExecutingMessageHandler - 无法尝试转换消息有效负载类型.组件'org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler#0'没有显式的ConversionService引用,并且上下文中没有'integrationConversionService'bean.

除此之外它不会给我太多.我一整天都在尝试一些小事情,似乎无处可去.有人看到我错过了吗?谢谢!

java spring spring-integration

5
推荐指数
1
解决办法
4454
查看次数

没有块处理的Spring Batch步骤

我有一个从数据库读取的作业步骤,并将输出写入平面文件并创建报告.
如果步骤失败,我希望它重新启动,从顶部处理全部.我不想将任何恢复纳入此步骤.
实现Spring Batch的最佳方法是什么,因此这个tasklet不会在进程中间执行任何块处理和触发恢复?

java processing spring spring-batch

5
推荐指数
1
解决办法
775
查看次数

语句关闭后不允许进行任何操作

我在No operations allowed after statement closed.尝试将值插入数据库的 Java 代码中收到带有签名的异常。错误签名表示我的 Statement 对象已关闭,我正在尝试在我的代码中再次使用它,但我很难理解为什么会发生这种情况,因为我没有关闭代码中任何地方的任何连接。

这是Java代码。

public class DataBaseAccessUtils {

    private static String jdbcUrl = 
            AppConfig.findMap("BXRequestTracker").get("jdbcUrl").toString();
    private static Connection connection = null;
    private static Statement statement = null;

    public static void insertHostname(String hostname, String rid, String fleet, String locale)
    {
        locale.toUpperCase();
        String sql = "UPDATE " + locale + "REQUESTTRACKER SET " + fleet 
                + "='" + hostname + "' WHERE RID='" + rid + "'";
        try {
            statement.execute(sql);
        }
        catch (SQLException e) …
Run Code Online (Sandbox Code Playgroud)

java mysql mysql-error-1064

5
推荐指数
2
解决办法
3万
查看次数