我有这段代码
@Entity
@Table(name = "picture")
public class Picture implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue
private int id;
@Column(name = "format", length = 8)
private String format;
@Basic(fetch = FetchType.LAZY)
@Column(name = "context", nullable = true, columnDefinition="mediumblob")
@Lob
private java.sql.Blob myBlobAttribute; // protected accessor and modifier
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "branch_fk", referencedColumnName = "id", nullable = false)
private Branch branch;
//Some setter and getter
我使用netbeans 6.7并在此Ide中显示我在行(private java.sql.Blob myBlobAttribute;)
上的错误
但代码运行,它在我的数据库上制作图片表!
这是一个真正的错误还是只是e通知,我该如何解决?
错误信息是:
basic attributes can only be of the following types: java primitive types,wrapper of primitive types, String, java.math.bigInteger, java.math.BigDecimal, java,util.Date, java.util.Calendar, java.sql.Data, java.sql.TimeStamp, byte[], Byte[], char[], Character[], enums, or any Serializable type
答案 0 :(得分:2)
NetBeans生成此警告的原因是,在使用java.sql.Blob
时,您应该只使用@Lob注释而不是@Basic。
然而,在运行时,听起来你的JPA实现通过忽略@Basic注释并且识别该列实际上是LOB来“帮助你”。这就是您的代码有效的原因。不同的JPA实现可能会失败或以某种方式表现不同。
答案 1 :(得分:1)
您的媒体资源类型为java.sql.Blob
,这是一个界面
首先,为什么?它不应该是一个字节数组(可能是你存储图像的地方)?
其次,这就是NetBeans抱怨的原因 - 一旦你尝试从这个表中读取东西,Hibernate也会这样 - 他们无法知道要在你的领域中创建数据的实际类型。
答案 2 :(得分:0)
问题是否在线之前?
@Lob
可能是@Blob
吗?