Java 旁路生成值

Java 旁路生成值,java,hibernate,Java,Hibernate,我正在尝试创建一个服装识别生成器。如果id为null,则生成else并给出值。我发现: 但我一直得到java.sql.SQLException:字段“id”没有默认值 我的实体: @Entity public class TestEntity extends AbstractEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "IdOrGenerated") @Gene

我正在尝试创建一个服装识别生成器。如果id为null,则生成else并给出值。我发现:

但我一直得到java.sql.SQLException:字段“id”没有默认值

我的实体:

@Entity
public class TestEntity extends AbstractEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "IdOrGenerated")
    @GenericGenerator(name = "IdOrGenerated", strategy = "com.xxx.service.UseIdOrGenerate")
    protected Long id;

    @Column(length = 64)
    private String name;


    public TestEntity(String name) {

    super();
    this.name = name;
    }


    public TestEntity(Long id, String name) {

    super();
    this.id = id;
    this.name = name;
    }


    public TestEntity() {

    super();
    }
}
我的自定义生成器:

public class UseIdOrGenerate extends IdentityGenerator {

    @Override
    public Serializable generate(SessionImplementor session, Object object) throws HibernateException {

    Serializable id = session.getEntityPersister(null, object).getClassMetadata().getIdentifier(object, session);

    id = id != null ? id : super.generate(session, object);
    return id;
    }
}

返回未分配的变量/字段会导致错误。需要为字段
id
指定一个默认值,这与它是什么无关,只要它有一个默认值

protected Long id = new Long(0);

对于任何想寻找答案的人,你可以参考这个