2

我试图@Column(name = "message")只为这个领域付出,但没有奏效。

我有一个 Bean 类,它包含 10 个字段,但我只想使用 HIBERNATE ANNOTATION 插入 2 个字段..?我怎样才能省略其余的字段?

我得到完整的查询:

insert into message (circle, day, destNumber, encryptedBody, hour, interfaceType, location, message) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

相反,我只想:插入消息(消息,msgId)值(?,?)

4

3 回答 3

2

使用动态插入或动态更新

dynamic-insert 属性告诉 Hibernate 是否在 SQL INSERT 语句中包含空属性。

仅更新修改的值 使用动态更新选项

如果 dynamic-update 设置为 true,那么 hibernate 会排除 Hibernate 的 SQL 更新语句中未修改的属性。

@实体

@表(名称=“表”)

@org.hibernate.annotations.Entity(dynamicUpdate = true)

公共类示例实现 java.io.Serializable { // }

动态插入示例

动态更新示例

于 2013-10-23T08:12:53.693 回答
1

根据文档,您需要将不想保留的属性注释@Transient

@Entity
public class Message implements Serializable {

    Long id;
    int circle;
    int day;
    String message
    //...

    @Id
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }

    // Will not be persisted
    @Transient
    public int getCircle() { return circle; }
    public void setCircle(int circle) { this.circle = circle; }

    // Will not be persisted
    @Transient
    public int getDay() { return day; }
    public void setDay(int day) { this.day = day; }

    // Will be persisted
    public string getMessage() { return message; }
    public void setMessage(String message) { this.message = message; }

    //...
}

如果您需要Id自动生成,则应使用以下内容对其进行注释@GeneratedValue

    @Id
    @GeneratedValue
    @Column(name = "msgId")
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }

注释有许多参数可@GeneratedValue帮助您定义应如何生成标识符。例如,如果它将由数据库(标识列)生成,则应使用@GeneratedValue(strategy=GenerationType.IDENTITY). 文档的这一部分列出了所有的生成策略。

请仔细阅读文档。您将在文档中找到几乎所有问题的答案。请参阅我提供的链接。

于 2013-10-23T05:01:07.867 回答
0

对于 MsgId 问题

1.确保您的 MsgId 字段设置为主键并自动递增

2.为MsgId添加这些注释

@ID

@GeneratedValue(策略=GenerationType.AUTO)

公共长 getMsgId() {

返回标识;

}

于 2013-10-23T08:29:34.087 回答