There is a SERIOUS bug or error.
empty11 Jun 13, 2006 2:53 AMDear.
I've installed the JBoss 4.0.4 GA with EJB3 with installer.
There is an bug with dealing with @Lob annotation column in the Mysql 4.1.4.
The column datatype is text in the mysql, so I've use @Lob annotation.
If the column data has I18N character(Korean for me), the column datas are cutting it off.
BUT if the column data has only english character, it's OK.
- JBoss 4.0.4 GA with EJB 3.0
- Mysql 4.1.4, database's character set is euckr
The entity bean source is as below.
package com.javamodeling.homepage.board; import java.util.Collection; import java.util.Iterator; import javax.ejb.Remove; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.Lob; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.TableGenerator; import org.hibernate.LazyInitializationException; import com.javamodeling.homepage.common.AbstractResultValue; import com.javamodeling.homepage.ejb.JmcMember; import com.javamodeling.util.DateUtils; @Entity @Table(name = "JAVAMODELING_BOARD") @TableGenerator(name = "IdGen", table = "ID_GENERATOR", pkColumnName = "ID_NO", pkColumnValue = "1", valueColumnName = "NEXT_VALUE", allocationSize = 1) public class Board extends AbstractResultValue { private Integer boardSeq; private Character noticeYn; private Integer groupNo; private Integer groupIndex; private Integer levelDepth; private String subject; private String contents; private String referer; private Integer viewCount; private Integer childReplyCount; private Character deleteYn; private Integer memberNo; private String inputDate; private String updateDate; private Integer parentBoardSeq; private Integer listSeq; private Board parentBoard; private BoardList boardList; // ???? ??? ?? ?? private JmcMember jmcMember; private Collection<BoardFile> boardFiles; private Collection<Board> childBoards; public Board() { } @Override public void reset() { } @Column(name = "LIST_SEQ") public Integer getListSeq() { return listSeq; } public void setListSeq(Integer listSeq) { this.listSeq = listSeq; } @Column(name = "BOARD_SEQ") @Id @GeneratedValue(strategy=GenerationType.TABLE, generator="IdGen") public Integer getBoardSeq() { return boardSeq; } public void setBoardSeq(Integer boardSeq) { this.boardSeq = boardSeq; } @Column(name = "CHILD_REPLY_COUNT") public Integer getChildReplyCount() { return childReplyCount; } public void setChildReplyCount(Integer childReplyCount) { this.childReplyCount = childReplyCount; } @Column(name = "CONTENTS") @Lob public String getContents() { return contents; } public void setContents(String contents) { this.contents = contents; } @Column(name = "DELETE_YN") public Character getDeleteYn() { return deleteYn; } public void setDeleteYn(Character deleteYn) { this.deleteYn = deleteYn; } @Column(name = "GROUP_INDEX") public Integer getGroupIndex() { return groupIndex; } public void setGroupIndex(Integer groupIndex) { this.groupIndex = groupIndex; } @Column(name = "GROUP_NO") public Integer getGroupNo() { return groupNo; } public void setGroupNo(Integer groupNo) { this.groupNo = groupNo; } @Column(name = "INPUT_DATE") public String getInputDate() { return inputDate; } public void setInputDate(String inputDate) { this.inputDate = inputDate; } @Column(name = "MEMBER_NO") public Integer getMemberNo() { return memberNo; } public void setMemberNo(Integer memberNo) { this.memberNo = memberNo; } @Column(name = "LEVEL_DEPTH") public Integer getLevelDepth() { return levelDepth; } public void setLevelDepth(Integer levelDepth) { this.levelDepth = levelDepth; } @Column(name = "NOTICE_YN") public Character getNoticeYn() { return noticeYn; } public void setNoticeYn(Character noticeYn) { this.noticeYn = noticeYn; } @Column(name = "PARENT_BOARD_SEQ") public Integer getParentBoardSeq() { return parentBoardSeq; } public void setParentBoardSeq(Integer parentBoardSeq) { this.parentBoardSeq = parentBoardSeq; } @Column(name = "REFERER") public String getReferer() { return referer; } public void setReferer(String referer) { this.referer = referer; } @Column(name = "SUBJECT") public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } @Column(name = "UPDATE_DATE") public String getUpdateDate() { return updateDate; } public void setUpdateDate(String updateDate) { this.updateDate = updateDate; } @Column(name = "VIEW_COUNT") public Integer getViewCount() { return viewCount; } public void setViewCount(Integer viewCount) { this.viewCount = viewCount; } @ManyToOne @JoinColumn(name = "LIST_SEQ", insertable = false, updatable = false) public BoardList getBoardList() { return boardList; } public void setBoardList(BoardList boardList) { this.boardList = boardList; } @ManyToOne @JoinColumn(name = "PARENT_BOARD_SEQ", insertable = false, updatable = false) public Board getParentBoard() { return parentBoard; } public void setParentBoard(Board parentBoard) { this.parentBoard = parentBoard; } @ManyToOne @JoinColumn(name = "MEMBER_NO", insertable = false, updatable = false) public JmcMember getJmcMember() { return jmcMember; } public void setJmcMember(JmcMember jmcMember) { this.jmcMember = jmcMember; } @OneToMany(fetch = FetchType.LAZY, mappedBy = "parentBoard") public Collection<Board> getChildBoards() { return childBoards; } public void setChildBoards(Collection<Board> childBoards) { this.childBoards = childBoards; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "board") public Collection<BoardFile> getBoardFiles() { return boardFiles; } public void setBoardFiles(Collection<BoardFile> boardFiles) { this.boardFiles = boardFiles; }
and after call a methos ad below, the data of Contents column is cut off
public Board searchOneWithOneLevel(Integer boardSeq) { Board board = null; try { board = entityManager.find(Board.class, boardSeq); board.setViewCount(board.getViewCount() + 1); entityManager.flush(); board.obtainOneLevelChild(); board.setResultCode(new Integer(1)); board.setResultMessage(BoardBundle.getString("Success.Search")); } catch (EntityNotFoundException e) { logger.error(e.getMessage()); board = new Board(); board.setResultCode(new Integer(-1)); board.setResultMessage(BoardBundle.getString("Error.EntityNotFoundException")); } return board; }
It seems like a bug.
# Ritchie.