Java 休眠不查找属性值

Java 休眠不查找属性值,java,hibernate,annotations,Java,Hibernate,Annotations,使用hibernate时,我在保存实例时遇到问题 我有以下数据库结构: Item - id - attributeId - other stuff Attribute - id - code - name 假设属性表包含如下项: 1 T Type1 2 R RType 3 G GType 以下是该类的注释: Class Attribute { @Id @Column(name = "ID") protected long id; @

使用hibernate时,我在保存实例时遇到问题

我有以下数据库结构:

Item
 - id
 - attributeId
 - other stuff

Attribute
  - id
  - code
  - name
假设属性表包含如下项:

1  T Type1
2  R RType
3  G GType
以下是该类的注释:

Class Attribute {
    @Id
    @Column(name = "ID")
    protected long id;

    @Column(name = "CODE", updatable = false)
    protected String code;

    @Column(name = "NAME", updatable = false)
    protected String name;
}
所以我希望能够创建一个新的Item类,并为其提供一个填充了代码和名称的属性类。让hibernate查找属性的id,并将该id插入Item的attributeId列

以下是我对项目的注释:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, 
                generator = "item_seq")
@SequenceGenerator(name = "item_seq", sequenceName = "ITEM_SEQ",
                   allocationSize = 1)
@Column(name = "ID")
protected long id;

@OneToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
@JoinColumn(name="ATTRIBUTE_ID", insertable = true, updatable = true)
private Attribute attribute;

我如何为Item类指定一个属性类,并填写代码和描述,然后让它查找属性id并将其分配给Item?

您不需要显式设置属性id,Hibernate会为您这样做。您只需将
属性
的实例(无论是新实例还是现有实例)设置为
实例,然后保存该项。像这样的

Item item = new Item();
// if you want to use an existing attribute, fetch it from some DAO by id
Attribute att = session.get(Attribute.class, someId);
item.setAttribute(att);
// save item
session.save(item);

这是关键,我不想做一个得到。我希望在保存时完成查找。好的,使用
session.load()
而不是
session.get()
。它只保留对实体的引用,而不选择db。