powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / OneToMany ORA-01407
10 сообщений из 10, страница 1 из 1
OneToMany ORA-01407
    #39415595
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть Enity

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
@Entity(name = "ProductForOrder")
@Table(name = "PRODUCT_FOR_ORDER")
public class ProductForOrder {
..
    private List<ProductImages> imageUrlTable;
...
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "PRODUCT_FOR_ORDER_ID", referencedColumnName = "ID")
    public List<ProductImages> getImageUrlTable() {
        return imageUrlTable;
    }
...
}

@Entity
@Table(name = "PRODUCT_IMAGES")
public class ProductImages {

    private Integer productForOrderId;
    private Integer productNSIImages;
    private Integer orderId;

    @Id
    @Column(name = "PRODUCT_FOR_ORDER_ID", nullable = false)
    public Integer getProductForOrderId() {
        return productForOrderId;
    }

    @Id
    @Column(name = "PRODUCT_NSI_IMAGES", nullable = false)
    public Integer getProductNSIImages() {
        return productNSIImages;
    }

    @Column(name = "ORDERID", nullable = false)
    public Integer getOrderId() {
        return orderId;
    }

}



Начитываю в ProductForOrder лист imageUrlTable
Потом удаляю пару штук и пробую смержиться, в результате ошибка

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Error Code: 1407
Call: UPDATE PRODUCT_IMAGES SET PRODUCT_FOR_ORDER_ID = ? WHERE ((PRODUCT_FOR_ORDER_ID = ?) AND ((PRODUCT_NSI_IMAGES = ?) AND (PRODUCT_FOR_ORDER_ID = ?)))
	bind => [null, 301, 2, 301]
	at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl$1.handleException(EntityManagerSetupImpl.java:745)
	at org.eclipse.persistence.transaction.AbstractSynchronizationListener.handleException(AbstractSynchronizationListener.java:275)
	at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:170)
	at org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion(JTASynchronizationListener.java:68)
	at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:76)
	at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:368)
	at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:91)
	at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162)
	at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1200)
	... 121 more
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: ORA-01407: невозможно заменить ("MOBILE_DEVELOP_6"."PRODUCT_IMAGES"."PRODUCT_FOR_ORDER_ID") на NULL



Как ее можно решить???
...
Рейтинг: 0 / 0
OneToMany ORA-01407
    #39415618
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обратный меппинг неправильный, вместо
Код: java
1.
private Integer productForOrderId;

должно быть
Код: java
1.
private ProductForOrder productForOrder;
...
Рейтинг: 0 / 0
OneToMany ORA-01407
    #39415646
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraОбратный меппинг неправильный, вместо
Код: java
1.
private Integer productForOrderId;

должно быть
Код: java
1.
private ProductForOrder productForOrder;



А надо будет еще аннотации типо @ManyToOne JoinColumn
Или хватит просто заменить?

Чтоб я просто методам тыка не делал
...
Рейтинг: 0 / 0
OneToMany ORA-01407
    #39415705
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, JPA уже стал с двумя полями @Id работать?
...
Рейтинг: 0 / 0
OneToMany ORA-01407
    #39416024
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=Koba=-,
тут оказывается еще и составной ключ. Тяжелый случай, но решаемо. Примерно так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
@Entity
@Table(name = "PRODUCT_FOR_ORDER")
public class ProductForOrder {
	@Id
	private Integer id;
	@OneToMany(mappedBy="productForOrder")
	private List<ProductImages> imageUrlTable;
// ... и т.д.
}

@Entity
@Table(name = "PRODUCT_IMAGES")
public class ProductImages {

	@Embeddable
	public static class ProductImagesId {
		@Column(name = "PRODUCT_FOR_ORDER_ID", nullable = false)
		private Integer productForOrderId;
		@Column(name = "PRODUCT_NSI_IMAGES", nullable = false)
		private Integer productNSIImages;
		// тут еще надо реализовать equals, hashcode, getters&setters
	}

	@EmbeddedId
	private ProductImagesId id;
	@MapsId("productForOrderId")
	private ProductForOrder productForOrder;
	// и т.д.
}


Если есть доступ к базе, то желательно для PRODUCT_IMAGES сделать суррогатный ключ, тогда весь этот кошмарный меппинг не понадобится
...
Рейтинг: 0 / 0
OneToMany ORA-01407
    #39416084
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,

У меня пошла ошибка

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
Error Code: 904
Call: SELECT ORDERID, PRODUCT_NSI_IMAGES1, PRODUCTFORORDER_ID FROM PRODUCT_IMAGES WHERE (PRODUCTFORORDER_ID = ?)
	bind => [301]
Query: ReadAllQuery(name="imageUrlTable" referenceClass=ProductImages sql="SELECT ORDERID, PRODUCT_NSI_IMAGES1, PRODUCTFORORDER_ID FROM PRODUCT_IMAGES WHERE (PRODUCTFORORDER_ID = ?)")
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:187)
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:277)
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:327)
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.as.ejb3.remote.EJBRemoteTransactionPropagatingInterceptor.processInvocation(EJBRemoteTransactionPropagatingInterceptor.java:79)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:47)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:100)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.as.ejb3.deployment.processors.StartupAwaitInterceptor.processInvocation(StartupAwaitInterceptor.java:22)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.as.ejb3.deployment.processors.EjbSuspendInterceptor.processInvocation(EjbSuspendInterceptor.java:44)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:67)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:54)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356)
	at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:636)
	at org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356)
	at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
	at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:198)
	at org.jboss.as.ejb3.remote.LocalEjbReceiver.processInvocation(LocalEjbReceiver.java:266)
	at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:184)
	at org.jboss.ejb.client.EJBObjectInterceptor.handleInvocation(EJBObjectInterceptor.java:58)
	at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
	at org.jboss.ejb.client.EJBHomeInterceptor.handleInvocation(EJBHomeInterceptor.java:83)
	at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
	at org.jboss.ejb.client.TransactionInterceptor.handleInvocation(TransactionInterceptor.java:42)
	at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
	at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:138)
	at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
	at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:255)
	at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:200)
	at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183)
	at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146)
	at com.sun.proxy.$Proxy112.findAllRequestProduct(Unknown Source)
	at by.softclub.abank.admin.ui.page.RequestProductListPage.loadRequestList(RequestProductListPage.java:35)
	at by.softclub.abank.admin.ui.page.RequestProductListPage.setData(RequestProductListPage.java:31)
	at by.softclub.abank.admin.ui.page.AbstractBasePage.checkAndLoad(AbstractBasePage.java:103)
	at by.softclub.abank.admin.ui.page.AbstractBasePage.prerender(AbstractBasePage.java:98)
	at by.softclub.abank.admin.ui.page.AbstractBasePage.init(AbstractBasePage.java:92)
	... 124 more
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.6.4.v20160829-44060b6): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00904: "PRODUCTFORORDER_ID": недопустимый идентификатор





Откуда вообще взялся PRODUCTFORORDER_ID ???
...
Рейтинг: 0 / 0
OneToMany ORA-01407
    #39416094
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@OneToMany(mappedBy="productForOrder")
private List<ProductImages> imageUrlTable;

Вот здесь проставляется PRODUCTFORORDER_ID
Почему?
...
Рейтинг: 0 / 0
OneToMany ORA-01407
    #39416232
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=Koba=-,
Это я пропустил аннотацию @ManyToOne+@JoinColumn (в данном случае наименование столбца берется из определения FK). И еще до кучи: @Embeddable ключ должен быть Serializable.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
@Entity
@Table(name = "PRODUCT_IMAGES")
public class ProductImages {

	@Embeddable
	public static class ProductImagesId implements Serializable {
		//@Column(name = "PRODUCT_FOR_ORDER_ID", nullable = false)
		private Integer productForOrderId;
		@Column(name = "PRODUCT_NSI_IMAGES", nullable = false)
		private Integer productNSIImages;
		// getters,setters,equals,hashcode
	}

	@EmbeddedId
	private ProductImagesId productImagesId;
	@MapsId("productForOrderId")
	@ManyToOne
	@JoinColumn(name = "PRODUCT_FOR_ORDER_ID", referencedColumnName = "ID")
	private ProductForOrder productForOrder;
	// getters+setters
}
...
Рейтинг: 0 / 0
OneToMany ORA-01407
    #39416292
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помощь
Вот еще вопрос

Создаю ProductForOrder и туда добавляю ProductImages,

В ProductImages где заполняю ProductImagesId
Оставляя ProductForOrder пустым

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: невозможно вставить NULL в ("MOBILE_DEVELOP_6"."PRODUCT_DESCRIPTION"."PRODUCT_FOR_ORDER_ID")

	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
	at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
	at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513)
	at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
	at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:208)
	at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1046)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1336)
	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3613)
	at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3694)
	at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1354)
	at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:537)
	at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:892)
	... 163 more



Это мне надо еще и ProductForOrder в ProductImages заполнять???
...
Рейтинг: 0 / 0
OneToMany ORA-01407
    #39416396
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=Koba=-,
видимо, да. Составные ключи всегда предполагают много писанины, а тут еще и FK в ключе.. Плюс еще надо разбираться с хозяином коллекции, предложенные аннотации - это только пример, а как оно должно быть - зависит от бизнес-кода.
Если это не легаси-база, то настоятельно советую отказаться от составного ключа, в ORM с ними тяжело
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / OneToMany ORA-01407
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]