在我们的应用程序中,我们从JPA实体生成数据库表。我需要创建一个实体将生成一个具有自动递增主键的表。随后,我需要能够在不存在PK的情况下执行纯SQL插入(在Hibernate之外)。
E.g。 INSERT INTO ApplicationLog VALUES ('logtime', 'logpackage' ,'logclass','method', 'message')
我尝试过一些像GenerationType.IDENTITY,AUTO,TABLE这样的策略,但是当我调用上面的insert语句时都没有。
@Entity
public class ApplicationLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name="logtime")
private String datetime;
@Column(name="logpackage")
private String _package;
@Column(name="logclass")
private String _class;
private String method;
private String message;
...
}
我会收到以下错误:
ERROR: invalid input syntax for integer: "asdf"
LINE 1: INSERT INTO ApplicationLog VALUES ('asdf', 'ee' ,'cc','33', ...
我的应用程序必须支持SqlServer(2012+),Postgres(9+)和Oracle(11g +),因此应用程序需要尽可能保持与数据库无关。
作为一些背景信息,我的设置只是允许使用Log4j的JDBCAppender,因此我可以使用Hibernate登录数据库并在应用程序中读取记录(用于显示)。 / p>