如何在检索过程中忽略hibernate中自动生成的密钥

时间:2014-03-14 09:19:41

标签: java mysql json hibernate rest

我正在使用带有restful接口的hibernate,我在三个表之间有一对多的关系,当我想从mysql数据库中检索这些表中的记录时(使用curl命令)我也得到了它们的id(这是auto - 生成但我不希望它们被检索,有什么方法可以做到这一点吗?

这是我检索的结果:

[
    {
        "deviceID": "no id",
        "deviceName": "no name",
        "deviceType": "no_type",
        ***"id": 1,***
        "newMeasurements": [
            {
                "measurementT": "type",
                "measurementU": "unit",
                "measurementV": "value",
                "measurementDateTime": "15.09.9898",
                ***"id": 1***
            }
        ],
        "Oldmeasurement": [
            {
                "measurementTime": "12.02.1586",
                "sampleR": "rate",
                "sampleU": "Unit",
                "sampleT": "Type",
                "sampleU": "Unit",
                "sampleV": "noValues",
                ***"id": 1***
            }
        ],
        ***"patientID": 1***
    }
]

1 个答案:

答案 0 :(得分:0)

在回答你的问题之前,我想就一些事情给你一瞥/背景。 在OOP的情况下,几乎所有东西都是对象以及如何识别,比较两个相同类型的实例在这里起着关键作用。有一个称为平等和身份的概念,用于识别和比较对象(我希望你知道它)。

类似地,hibernate中还有另一种称为数据库标识的机制来识别/比较两个相同类型的实例。这意味着它是一种确定表示/指向同一行的两个相同类型实例的方法。这只能通过在检索期间要忽略的标识符来实现。

底线是Id对于识别对象是非常必要的,因为hibernate根据值而不是根据其内存位置(标识)来比较对象

创建实体的推荐方法是

Class MyEntity
{

@id
@column(name=”id”)

//Id generation strategy goes here. 
Private int id;

@column(name=”name”)
Private String name;

Public int getId()
{
return this.id;
}
//Getter and setters of name

}

您可能已经注意到缺少ID的setter方法。原因是不允许/推荐更改身份。希望这有用!