エンティティにいくつかのbyte[]
フィールドがあります。例:
@Entity
public class ServicePicture implements Serializable {
private static final long serialVersionUID = 2877629751219730559L;
// seam-gen attributes (you should probably edit these)
@Id
@GeneratedValue
private Long id;
private String description;
@Lob
@Basic(fetch = FetchType.LAZY)
private byte[] picture;
私のデータベーススキーマでは、フィールドはBLOB
に設定されているため、これで問題ありません。とにかく:画像またはPDFを挿入しようとするたびに-1mb
を超えるものは何もありません。
16:52:27,327 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: 22001
16:52:27,327 ERROR [JDBCExceptionReporter] Data truncation: Data too long for column 'picture' at row 1
16:52:27,328 ERROR [STDERR] javax.persistence.PersistenceException: org.hibernate.exception.DataException: could not insert: [de.ac.dmg.productfinder.entity.ServicePicture]
16:52:27,328 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.Java:629)
16:52:27,328 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.Java:218)
16:52:27,328 ERROR [STDERR] at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
16:52:27,328 ERROR [STDERR] at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
16:52:27,328 ERROR [STDERR] at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
16:52:27,328 ERROR [STDERR] at Java.lang.reflect.Method.invoke(Unknown Source)
16:52:27,328 ERROR [STDERR] at org.jboss.seam.persistence.EntityManagerInvocationHandler.invoke(EntityManagerInvocationHandler.Java:46)
16:52:27,328 ERROR [STDERR] at $Proxy142.persist(Unknown Source)
MySQL cnfを確認し、max_allowed
paramが16M
に設定されています-何か不足していますか?
それはすべて、picture
列に使用される列タイプに依存します。ニーズに応じて、次を使用します。
TINYBLOB
:最大長255バイトBLOB
:最大長65,535バイトMEDIUMBLOB
:最大長16,777,215バイトLONGBLOB
:最大長4,294,967,295バイトJPAアノテーションからテーブルを生成する場合、length
のColumn
属性を指定することで、MySQLが使用するタイプを「制御」できることに注意してください。たとえば:
@Lob @Basic(fetch = FetchType.LAZY)
@Column(length=100000)
private byte[] picture;
length
に応じて、以下を取得します。
0 < length <= 255 --> `TINYBLOB`
255 < length <= 65535 --> `BLOB`
65535 < length <= 16777215 --> `MEDIUMBLOB`
16777215 < length <= 2³¹-1 --> `LONGBLOB`
この場合、次の構文を使用する必要がありました。
public class CcpArchive
{
...
private byte[] ccpImage;
...
@Lob
@Column(nullable = false, name = "CCP_IMAGE", columnDefinition="BINARY(500000)")
public byte[] getCcpImage()
{
return ccpImage;
}
...
}