gpt4 book ai didi

java - 无法使用 eclipse link 和 oracle db 生成表 - IllegalBlockSizeException

转载 作者:行者123 更新时间:2023-12-01 08:55:18 31 4
gpt4 key购买 nike

我创建了一个动态 Web 项目,并在我的 eclipse mars 中添加了 JPA 方面。在我的构建路径中,我有:jdk8、EclipseLink 2.6、JPA 2.1、Tomcat 8、Oracle 瘦驱动程序(ojdbc14.jar);

有一个奇怪的问题,因为同一个项目在某些机器上可以运行,但在其他机器上却不能运行。

出于这个目的,我认为 tomcat 并不是必需的,因为我只想从一个简单的 jpa 项目中的实体生成表。

我创建了两个 jpa 实体,并将 persistence.xml 设置为指向我的 Oracle 数据库(Ping 成功):

persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="question" transaction-type="RESOURCE_LOCAL">
<class>it.corsojava.question.domain.Student</class>
<class>it.corsojava.question.domain.Question</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@192.168.14.111:1521:ORCL"/>
<property name="javax.persistence.jdbc.user" value="fede"/>
<property name="javax.persistence.jdbc.password" value="fede"/>
<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/>
<property name="eclipselink.jdbc.bind-parameters" value="false"/>
<property name="eclipselink.jdbc.exclusive-connection.is-lazy" value="true"/>
<property name="eclipselink.jdbc.exclusive-connection.mode" value="Transactional"/>
<property name="eclipselink.jdbc.batch-writing" value="Oracle-JDBC"/>
</properties>
</persistence-unit>
</persistence>

问题.java 包 it.corsojava.question.domain;

import java.io.Serializable;
import java.lang.Long;
import java.lang.String;
import javax.persistence.*;

/**
* Entity implementation class for Entity: Question
*
*/
@Entity
public class Question implements Serializable {

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String text;
private static final long serialVersionUID = 1L;

public Question() {
super();
}
public Long getId() {
return this.id;
}

public void setId(Long id) {
this.id = id;
}
public String getText() {
return this.text;
}

public void setText(String text) {
this.text = text;
}

}

学生.java

package it.corsojava.question.domain;

import java.io.Serializable;
import java.lang.Long;
import java.lang.String;
import javax.persistence.*;

/**
* Entity implementation class for Entity: Student
*
*/
@Entity
public class Student implements Serializable {

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String name;

private String username;
private String password;
private String email;


private static final long serialVersionUID = 1L;

public Student() {
super();
}
public Long getId() {
return this.id;
}

public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}
public String getUsername() {
return this.username;
}

public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return this.password;
}

public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return this.email;
}

public void setEmail(String email) {
this.email = email;
}

}

不幸的是,当我运行 JPA 工具>从实体创建表时...我收到以下错误:

[EL Fine]: server: Configured server platform: org.eclipse.persistence.platform.server.NoServerPlatform
[EL Config]: metadata: The access type for the persistent class [class it.corsojava.question.domain.Question] is set to [FIELD].
[EL Config]: metadata: The access type for the persistent class [class it.corsojava.question.domain.Student] is set to [FIELD].
[EL Config]: metadata: The alias name for the entity class [class it.corsojava.question.domain.Question] is being defaulted to: Question.
[EL Config]: metadata: The table name for entity [class it.corsojava.question.domain.Question] is being defaulted to: QUESTION.
[EL Config]: metadata: The column name for element [id] is being defaulted to: ID.
[EL Config]: metadata: The column name for element [text] is being defaulted to: TEXT.
[EL Config]: metadata: The alias name for the entity class [class it.corsojava.question.domain.Student] is being defaulted to: Student.
[EL Config]: metadata: The table name for entity [class it.corsojava.question.domain.Student] is being defaulted to: STUDENT.
[EL Config]: metadata: The column name for element [password] is being defaulted to: PASSWORD.
[EL Config]: metadata: The column name for element [name] is being defaulted to: NAME.
[EL Config]: metadata: The column name for element [id] is being defaulted to: ID.
[EL Config]: metadata: The column name for element [email] is being defaulted to: EMAIL.
[EL Config]: metadata: The column name for element [username] is being defaulted to: USERNAME.
[EL Severe]: ejb: Local Exception Stack:
Exception [EclipseLink-7107] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Error encountered during string decryption.
Internal Exception: javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
at org.eclipse.persistence.exceptions.ValidationException.errorDecryptingPassword(ValidationException.java:894)
at org.eclipse.persistence.internal.security.JCEEncryptor.decryptPassword(JCEEncryptor.java:114)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateLogins(EntityManagerSetupImpl.java:2404)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateSession(EntityManagerSetupImpl.java:2716)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:710)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:205)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:183)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getDatabaseSession(EntityManagerFactoryImpl.java:528)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:150)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:188)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.buildEntityManagerFactory(Main.java:94)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.execute(Main.java:80)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.main(Main.java:68)
Caused by: javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:913)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
at com.sun.crypto.provider.DESCipher.engineDoFinal(DESCipher.java:314)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
at org.eclipse.persistence.internal.security.JCEEncryptor.decryptPassword(JCEEncryptor.java:109)
... 12 more

Exception in thread "main" javax.persistence.PersistenceException: Exception [EclipseLink-7107] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Error encountered during string decryption.
Internal Exception: javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:815)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:205)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:183)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getDatabaseSession(EntityManagerFactoryImpl.java:528)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:150)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:188)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.buildEntityManagerFactory(Main.java:94)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.execute(Main.java:80)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.main(Main.java:68)
Caused by: Exception [EclipseLink-7107] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Error encountered during string decryption.
Internal Exception: javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
at org.eclipse.persistence.exceptions.ValidationException.errorDecryptingPassword(ValidationException.java:894)
at org.eclipse.persistence.internal.security.JCEEncryptor.decryptPassword(JCEEncryptor.java:114)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateLogins(EntityManagerSetupImpl.java:2404)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateSession(EntityManagerSetupImpl.java:2716)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:710)
... 9 more
Caused by: javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:913)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
at com.sun.crypto.provider.DESCipher.engineDoFinal(DESCipher.java:314)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
at org.eclipse.persistence.internal.security.JCEEncryptor.decryptPassword(JCEEncryptor.java:109)
... 12 more

最佳答案

这与已知的 bug 相关2.6.5-RC1 版本已修复此问题。它还可以按预期与最新的 2.6.5-RC2 候选版本(自 2017 年 6 月起提供)配合使用。

如果您有 Maven 项目,请更改 EclipseLink 依赖项的版本字符串,如下所示:

 <dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.5-RC2</version>
</dependency>

如果这是一个独立项目,请查找最新的2.6.5-RC2 jar file on Maven Central 。只需删除旧的 jar 文件并将新的文件放入应用程序的类路径中即可。

希望有帮助。

关于java - 无法使用 eclipse link 和 oracle db 生成表 - IllegalBlockSizeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42068678/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com