kir*_*rti 25 java postgresql hibernate jpa
我正在执行hibernate jpa批量更新,它给我以下错误
2015-04-21 15:53:51,907 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Thread-283 (HornetQ-client-global-threads-462057890)) SQL Error: 0, SQLState: 42P01
2015-04-21 15:53:51,908 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (Thread-283 (HornetQ-client-global-threads-462057890)) ERROR: relation "my_seq_gen" does not exist
Run Code Online (Sandbox Code Playgroud)
我正在使用postgres数据库,我的ID是自动生成的
@Id
@SequenceGenerator(name="seq-gen",sequenceName="MY_SEQ_GEN"initialValue=205, allocationSize=12)
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="seq-gen")
@Column(name="\"ID\"",unique=true,nullable=false)
private int id;
Run Code Online (Sandbox Code Playgroud)
这是我的批量插入代码段
getEm().getTransaction().begin();
System.out.println("transaction started--------------");
try {
for (Receipt ReceiptEntity : arrReceiptEntity) {
getEm().persist(ReceiptEntity);
}
getEm().getTransaction().commit();
System.out.println("commited");
} catch (Exception exception) {
System.out.println("error----------------------------------------------------------------------");
if(getEm().getTransaction().isActive())
getEm().getTransaction().rollback();
LOG.error(exception);
} finally {
getEm().flush();
getEm().clear();
getEm().close();
}
Run Code Online (Sandbox Code Playgroud)
我在persistence.xml中添加了以下属性
<property name="hibernate.id.new_generator_mappings" value="true"/>
Run Code Online (Sandbox Code Playgroud)
请告诉我我做错了什么.
Vse*_*aev 44
尝试id使用@Id和注释你的注释@GeneratedValue(strategy=GenerationType.IDENTITY).它适用于PostgreSql.
更新:仅当您的id列声明为SERIAL或BIGSERIAL类型时才会起作用.
Ber*_*eri 13
如果您不想更改实体定义,则需要在postgreSQL模式中使用名称创建序列hibernate_sequence.
CREATE SEQUENCE hibernate_sequence START 1;
Run Code Online (Sandbox Code Playgroud)
更新:
您缺少为实体定义的第二个序列generatef,只需像上一个一样添加它:
CREATE SEQUENCE my_seq_gen START 1;
Run Code Online (Sandbox Code Playgroud)
疼痛有用的教程:http: //www.concretepage.com/hibernate/generatedvalue-strategy-generationtype-sequence-hibernate
小智 6
我希望你得到答案,但如果你仍然找到答案,这可能会有所帮助.
我有同样的问题并解决了它用@SequenceGenerator和注释id的getter方法@GeneratedValue.
@SequenceGenerator(name="seq-gen",sequenceName="MY_SEQ_GEN", initialValue=205, allocationSize=12)
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="seq-gen")
public int getId(){
return id;
}
Run Code Online (Sandbox Code Playgroud)
检查application.properties文件。
确保 spring.jpa.hibernate.ddl-auto =更新
您可以尝试以下操作:
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "auto_gen")
@SequenceGenerator(name = "auto_gen", sequenceName = "A")
@Column(name = "ID")
private int id;
Run Code Online (Sandbox Code Playgroud)
谢谢
| 归档时间: |
|
| 查看次数: |
44426 次 |
| 最近记录: |