powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate save the transient instance before flushing???
11 сообщений из 11, страница 1 из 1
Hibernate save the transient instance before flushing???
    #37834255
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гляньте, что не так? Прикрепляю трейс ошибки - спасибо.

1. Пакую параметры которые нужно сохранить в отдельный класс(так удобней).
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
	                SaveParams saveParams = new SaveParams();
			saveParams.setPlayer1(chessModel.getPlayer1());
			saveParams.setPlayer2(chessModel.getPlayer2());
			saveParams.setServerName(this.chessClient.getServerName());
			saveParams.setBoardMatrix(chessModel.matrixToArrayList());
			
			ChessDao chessDao = new ChessDao();
			chessDao.saveGame(saveParams);



2. Сохраняю так.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class ChessDao {

	public void saveGame(SaveParams saveParams) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		session.save(saveParams);
		session.getTransaction().commit();
	}
}


Дебаггером шел - ошыбка вылетает на посл строчке session.getTransaction().commit();

3.
Код: 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.
@Entity
@Table(name="games")
public class SaveParams {
	
	@Id
	@Column(name="serverName")
	private String serverName;

	@ManyToOne(cascade={CascadeType.REFRESH},fetch=FetchType.LAZY)
	@JoinColumn(name="player1_id")
	private Player player1;
	
	@ManyToOne(cascade={CascadeType.REFRESH},fetch=FetchType.LAZY)
	@JoinColumn(name="player2_id")
	private Player player2;
	
	@Column(name="boardMatrix") private ArrayList boardMatrix;
	
	public SaveParams() {
		
	}

	public String getServerName() {
		return serverName;
	}

	public void setServerName(String serverName) {
		this.serverName = serverName;
	}

	public Player getPlayer1() {
		return player1;
	}

	public void setPlayer1(Player player1) {
		this.player1 = player1;
	}

	public Player getPlayer2() {
		return player2;
	}

	public void setPlayer2(Player player2) {
		this.player2 = player2;
	}

	public ArrayList getBoardMatrix() {
		return boardMatrix;
	}

	public void setBoardMatrix(ArrayList boardMatrix) {
		this.boardMatrix = boardMatrix;
	}

}



4.
Код: 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.
@Entity
@Table(name="player")
public class Player {
	
	@Id
	@GeneratedValue (strategy = GenerationType.IDENTITY)
	@Column(name = "id")
	private int id;
	
    @Column(name="name") private String name;
    @Column(name="piecesColor") private String piecesColor;
    @Column(name="moveHystory") private ArrayList<String> moveHystory = new ArrayList<String>();
    @Column(name="hystoryCounter") private int hystoryCounter=1;

	public Player(String name, String piecesColor) {
		this.name = name;
		this.piecesColor = piecesColor;
	}
	
	public Player() {
		// TODO Auto-generated constructor stub
	}

	public String getName() {
		return name;
	}

	public String getPiecesColor() {
		return piecesColor;
	}

	public ArrayList<String> getMoveHystory() {
		return moveHystory;
	}

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

	public int getHystoryCounter() {
		return hystoryCounter;
	}

	public void setHystoryCounter(int hystoryCounter) {
		this.hystoryCounter = hystoryCounter;
	}

	public void setPiecesColor(String piecesColor) {
		this.piecesColor = piecesColor;
	}

	public void setMoveHystory(ArrayList<String> moveHystory) {
		this.moveHystory = moveHystory;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
}



5. Трейс ошибки
Код: 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.
Exception in thread "AWT-EventQueue-0" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: chess.models.Player
	at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:243)
	at org.hibernate.type.EntityType.getIdentifier(EntityType.java:456)
	at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:265)
	at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:275)
	at org.hibernate.type.TypeHelper.findDirty(TypeHelper.java:295)
	at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:3404)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:520)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:230)
	at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:154)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
	at chess.dao.ChessDao.saveGame(ChessDao.java:14)
	at chess.network.ChessGUINetwork_Controller.actionPerformed(ChessGUINetwork_Controller.java:55)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6290)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6055)
	at java.awt.Container.processEvent(Container.java:2039)
	at java.awt.Component.dispatchEventImpl(Component.java:4653)
	at java.awt.Container.dispatchEventImpl(Container.java:2097)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166)
	at java.awt.Container.dispatchEventImpl(Container.java:2083)
	at java.awt.Window.dispatchEventImpl(Window.java:2482)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:648)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:607)
	at java.awt.EventQueue$1.run(EventQueue.java:605)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:621)
	at java.awt.EventQueue$2.run(EventQueue.java:619)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)



В базу как-то заносит, но я не уверен что правильно, тем более транзакция заканчивается ошибкой.
Так же, не уверен на счет правильности соединений с классом Player.
...
Рейтинг: 0 / 0
Hibernate save the transient instance before flushing???
    #37834258
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема с каскадным сохранением. У вас почему-то только REFRESH указан. В этом случае хибернейт ожидает, что вы сналача сохраните новый Player, которого ещё нет в базе, а потом SaveParams. Если вы хотите чтобы при сохранении SaveParams, хибернейт сам добавлял и новых Player в БД, то нужно указать соответствующие типы в каскаде - ALL\PERSIST\SAVE_UPDATE в зависимости от того что вам больше подходит.
...
Рейтинг: 0 / 0
Hibernate save the transient instance before flushing???
    #37834298
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не пинайте за глупые вопросы. Сейчас вникать во все тонкости Hibernate чуток нету времени.

Нужно сохранять этот объект "SaveParams", а потом тащить его из базы. id в данном случае это serverName.
И еще я заметил что при добавлении просто заменяется содержимое, а не становится отдельной строкой в таблице..

BlazkowiczПроблема с каскадным сохранением. У вас почему-то только REFRESH указан. В этом случае хибернейт ожидает, что вы сналача сохраните новый Player, которого ещё нет в базе, а потом SaveParams. Если вы хотите чтобы при сохранении SaveParams, хибернейт сам добавлял и новых Player в БД, то нужно указать соответствующие типы в каскаде - приблизительно понятно. Но не совсем. :(


BlazkowiczALL\PERSIST\SAVE_UPDATE в зависимости от того что вам больше подходит. - не знаю, что больше подходит. Нужно сохранять этот класс а потом читать и все, Только как сделать, чтоб записи добавлялись, а не заменялись. :( в конфиге hibernate.hbm2dll.auto стоит update

Спасибо!
...
Рейтинг: 0 / 0
Hibernate save the transient instance before flushing???
    #37834307
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hibernate.hbm2dll.auto не для этого - он для автоматического отслеживания структуры таблиц, но не данных.
А если хочешь, чтобы вне зависимости от объекта он не перезаписывался, а добавлялся, просто обнуляй у объекта ключевое поле @Id.

У-у-у, а что, имя сервера - это ключевое поле? Странная структура. Так для строки с одинаковыми serverName будет идти перезапись.
Как бы напрашивается совет:
Код: java
1.
2.
3.
4.
5.
6.
7.
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name="serverName")
private String serverName;
...
Рейтинг: 0 / 0
Hibernate save the transient instance before flushing???
    #37834314
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_Не пинайте за глупые вопросы. Сейчас вникать во все тонкости Hibernate чуток нету времени.
LOL. Тогда пишите на SQL/myBatis. В хибере пока во все тонкости не вникнешь, тыкать бесполезно.


_webdev_Нужно сохранять этот объект "SaveParams", а потом тащить его из базы.
ОК. Это какое отношение имеет к проблеме? ORM он для того и нужен.

_webdev_ id в данном случае это serverName.
И еще я заметил что при добавлении просто заменяется содержимое, а не становится отдельной строкой в таблице..

id это PK - первичный ключ. Он уникален в таблице. Получить две записи с одним ID база не даст. Так что вас удивляет?

_webdev_приблизительно понятно. Но не совсем. :(

Раз вас всё равно, тогда ответ вот:
@ManyToOne(cascade={CascadeType.ALL}


_webdev_Только как сделать, чтоб записи добавлялись, а не заменялись. :(

О каких именно записях речь? Мы как минимум две сущности видим.

_webdev_в конфиге hibernate.hbm2dll.auto стоит update

DDL это операции манипуляции структурами таблиц - CREATE, ALTER и т.п.
SQL это операции с данными - записи
hbm2dll отвечает за создание\апдейт структур в БД
...
Рейтинг: 0 / 0
Hibernate save the transient instance before flushing???
    #37834319
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IDVsbruckhibernate.hbm2dll.auto не для этого - он для автоматического отслеживания структуры таблиц, но не данных.
А если хочешь, чтобы вне зависимости от объекта он не перезаписывался, а добавлялся, просто обнуляй у объекта ключевое поле @Id. - так что тогда следует написать, чтоб таблицы создавались автоматически? И данные добавлялись и не перезаписывались? :(

IDVsbruckУ-у-у, а что, имя сервера - это ключевое поле? Странная структура. Так для строки с одинаковыми serverName будет идти перезапись.
Как бы напрашивается совет: - да, я это понимаю, у меня исключается одинаковое "serverName" - нужно именно так, так как я хочу потом тащить из базы по этому полю.
...
Рейтинг: 0 / 0
Hibernate save the transient instance before flushing???
    #37834323
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczLOL. Тогда пишите на SQL/myBatis. В хибере пока во все тонкости не вникнешь, тыкать бесполезно. - нужен именно Hibernate.


Blazkowiczid это PK - первичный ключ. Он уникален в таблице. Получить две записи с одним ID база не даст. Так что вас удивляет? - да, это я понимаю, и понимаю как работать с БД.
BlazkowiczРаз вас всё равно, тогда ответ вот:
@ManyToOne(cascade={CascadeType.ALL} - все равно рубит ошибку. Если она другая сейчас закину трейс.

BlazkowiczО каких именно записях речь? Мы как минимум две сущности видим. - есть класс "ServerParams" в нем несколько полей простых типов и два поля с типом Player. Нужно сохранить обьект "ServerParams", а потом читать его по ключевому полю "serverName".


BlazkowiczDDL это операции манипуляции структурами таблиц - CREATE, ALTER и т.п.
SQL это операции с данными - записи
hbm2dll отвечает за создание\апдейт структур в БД приблизительно понятно, а как сделать, чтоб таблицы раз создались и потом только в них записывать нужные мне объекты?

Спасибо!
...
Рейтинг: 0 / 0
Hibernate save the transient instance before flushing???
    #37834328
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Установил в
Код: java
1.
2.
3.
4.
5.
6.
7.
	@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
	@JoinColumn(name="player1_id")
	private Player player1;
	
	@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
	@JoinColumn(name="player2_id")
	private Player player2;




Теперь ругается, что сл длинное поле - там 144 значения типа Integer
Код: 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.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
			java.sql.BatchUpdateException: Data truncation: Data too long for column 'boardMatrix' at row 1
	at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:652)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
	at chess.dao.ChessDao.saveGame(ChessDao.java:14)
	at chess.network.ChessGUINetwork_Controller.actionPerformed(ChessGUINetwork_Controller.java:55)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6290)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6055)
	at java.awt.Container.processEvent(Container.java:2039)
	at java.awt.Component.dispatchEventImpl(Component.java:4653)
	at java.awt.Container.dispatchEventImpl(Container.java:2097)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166)
	at java.awt.Container.dispatchEventImpl(Container.java:2083)
	at java.awt.Window.dispatchEventImpl(Window.java:2482)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:648)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:607)
	at java.awt.EventQueue$1.run(EventQueue.java:605)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:621)
	at java.awt.EventQueue$2.run(EventQueue.java:619)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
12:22:40,644  WARN JDBCExceptionReporter:233 - SQL Error: 0, SQLState: 22001
12:22:40,645 ERROR JDBCExceptionReporter:234 - Data truncation: Data too long for column 'boardMatrix' at row 1
Exception in thread "AWT-EventQueue-0" org.hibernate.exception.DataException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:102)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
	at chess.dao.ChessDao.saveGame(ChessDao.java:14)
	at chess.network.ChessGUINetwork_Controller.actionPerformed(ChessGUINetwork_Controller.java:55)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6290)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6055)
	at java.awt.Container.processEvent(Container.java:2039)
	at java.awt.Component.dispatchEventImpl(Component.java:4653)
	at java.awt.Container.dispatchEventImpl(Container.java:2097)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166)
	at java.awt.Container.dispatchEventImpl(Container.java:2083)
	at java.awt.Window.dispatchEventImpl(Window.java:2482)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:648)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:607)
	at java.awt.EventQueue$1.run(EventQueue.java:605)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:621)
	at java.awt.EventQueue$2.run(EventQueue.java:619)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:618)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column 'boardMatrix' at row 1
	at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:652)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	... 45 more
...
Рейтинг: 0 / 0
Hibernate save the transient instance before flushing???
    #37834330
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_webdev_ да, это я понимаю, и понимаю как работать с БД.
Тогда к чему эти пассажи про "добавляет"\"заменяет" записи:? Включите SQL log и смотрите. Если ID установлен, то UPDATE, если ID - null, то INSERT. Всё просто и прямо.

_webdev_ есть класс "ServerParams" в нем несколько полей простых типов и два поля с типом Player. Нужно сохранить обьект "ServerParams", а потом читать его по ключевому полю "serverName".
У вас Player.id имеет тим int. Поэтому даже для новых записей там значение 0. Нужно использовать тип Integer, который у новых записей будет null. Либо указать хиберу что 0 здесь - индикатор несохраненной сущности.

_webdev_ а как сделать, чтоб таблицы раз создались и потом только в них записывать нужные мне объекты?
почитайте в мануале о возможных значениях этой опции
...
Рейтинг: 0 / 0
Hibernate save the transient instance before flushing???
    #37834342
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:( Понятн, значит я попал.. :( У меня сл мало времени, я просто не успею разобраться во всех тонкостях. Понимаю, что с хибернейтом не так просто, но я ж и много не прошу, просто сохранить и прочитать потом объект.

Хорошо, можете закинуть пример хотя бы, как это провернуть с одним классом?
Это: - автоматически создать таблицу по классу "ServerParams", и потом добавлять в нее записи где ключевое поле "serverName"(оно будет всегда уникальное). и что добавить в hibernate.config

К примеру вот такой класс

Код: 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.
@Entity
@Table(name="games")
public class SaveParams {
	
	@Id
	@Column(name="serverName")
	private String serverName;
	
	@Column(name="boardMatrix") private ArrayList boardMatrix;
	
	public SaveParams() {
		
	}

	public String getServerName() {
		return serverName;
	}

	public void setServerName(String serverName) {
		this.serverName = serverName;
	}

	public ArrayList getBoardMatrix() {
		return boardMatrix;
	}

	public void setBoardMatrix(ArrayList boardMatrix) {
		this.boardMatrix = boardMatrix;
	}

}
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Hibernate save the transient instance before flushing???
    #39567971
talent
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Есть 2 сущности
Код: 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.
@Entity
@Table(schema = "public", name = "students")
public class Student {
    @Id
    @Column(name = "id")
    private Long id;
    @Column(name = "name")
    private String name;
    @Column(name = "family")
    private String family;
    @Column(name = "patronymic")
    private String patronymic;
    ....
    @ManyToOne
    @JoinColumn(name = "teacher_id")
    private Teacher teacher;
}

@Entity
@Table(schema = "public", name = "teachers")
public class Teacher {
    @Id
    @Column(name = "id")
    private Long id;
    @Column(name = "name")
    private String name;
    @Column(name = "family")
    private String family;
    @Column(name = "patronymic")
    private String patronymic;
    ....
    @OneToMany(mappedBy = "teacher", cascade = {CascadeType.ALL})
    private List<Student> studentsList;
}



Есть JpaRepository<Teacher, Long>, в котором есть метод
Код: java
1.
List<Teacher> findByStudent(Student student)


Также есть rest сервис, который в итоге вызывает метод findByStudent. В теле запроса передается что-то типа(json информация о студенте, например фамилия)
Код: javascript
1.
{"family" : "Иванов"}


Но в итоге падает с ошибкой
Код: java
1.
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: <package>.Student



Если скажем в JpaRepository создать метод(со всеми вытекающими), например
Код: java
1.
List<Teacher> findByStudent_Family(Student student)


то ошибки не возникает, но результат пустой. Заранее спасибо
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate save the transient instance before flushing???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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