2

我无法通过我的 spring 存储库保存一个简单的文档。这是文件:包com.foundry.domain;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.layers.repository.mongo.RooMongoEntity;
import org.springframework.roo.addon.tostring.RooToString;

import com.foundry.domain.location.Location;

@RooJavaBean
@RooToString
@RooMongoEntity
public class Sensor {
    @Id
    String id;

    @Indexed(unique=true)
    String name;

    @NotNull
    String typeRef;

    @NotNull
    @Indexed
    private List<String> tags = new ArrayList<String>();

    @GeoSpatialIndexed
    Location location;

    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "M-")
    private Date creationDate = new Date();


}

在我的测试课中,我正在执行以下操作:

@Test
    public void testSaveSingleSensor(){
        Sensor s = new Sensor();
        s.setName("Test");
        s.setLocation(new Location());
        s.getLocation().setX(12);
        s.getLocation().setY(13);
        s.getLocation().setZ(14);
        s.setTypeRef("blah");
        s = iSensorRepository.save(s);
        s = iSensorRepository.findOne(s.getId());
        Assert.assertNotNull(s);
        Assert.assertTrue(s.getId() != null);
    }

我基本上创建了一个传感器,尝试存储它,然后尝试立即检索它。我所知道的是 Location 对象导致它不被保存。如果我注释掉位置对象的设置,它就可以工作。这是位置对象:

package com.foundry.domain.location;

import java.util.Date;

import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.tostring.RooToString;

@RooJavaBean
@RooToString
public class Location {
    double x=0;
    double y=0;
    double z=0;

    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "M-")
    private Date lastUpdate;

}

我相信这与我对 GeoSpatial Index 的误解有关。我假设我们可以有其他数据(z 和 lastUpdate),但也许我错了。我没有发现任何其他指示。更多测试即将到来,但感谢所有帮助。

4

0 回答 0