java世界中是否有任何方法可以在不需要无参数构造函数和Serialized实现的情况下进行序列化?
所以我有以下情况:
@Entity
class Image {
@Id
@GeneratedValue
private Long id;
....
}
@Entity
class ImageData implements Serializable {
@Id
@OneToOne
private Image image;
....
}
Run Code Online (Sandbox Code Playgroud)
这一切都工作正常,但为什么 ImageData 需要可序列化?如果不是,我会收到异常,它需要可序列化:
org.hibernate.MappingException: composite-id class must implement Serializable:...
Run Code Online (Sandbox Code Playgroud)
我知道标识符需要可序列化,但为什么现在却相反了?
我非常喜欢 CDI 的构造函数注入,但现在我发现了一个用例,其中构造函数注入显然无法按预期工作。
在我的示例中,我有两个类。类“BeanA”没有明确定义的范围,也没有实现可序列化。类“BeanB”使用@SessionScoped 进行注释并且确实实现了可序列化。
public class BeanA{
}
@SessionScoped
public class BeanB implements Serializable{
@Inject
private BeanA beanA;
}
Run Code Online (Sandbox Code Playgroud)
When I try to inject an instance of BeanA into BeanB of cource I get an UnserializableDependencyException from Weld because BeanA isn't serializable. This is the expected behaviour.
When I mark the field "beanA" with "transient" the injection works without problems:
@Inject
private transient BeanA beanA;
Run Code Online (Sandbox Code Playgroud)
Now Weld doesn't throw any exceptions.
This is perfectly fine for me but my …
我正在使用以下映射将 Serializable 对象存储到 SQL Server 2008:
<class name="EMSApplication.Data.Domain.Configuration, EMSApplication.Data" table="ems_Configurations" proxy="EMSApplication.Data.Domain.IConfiguration, EMSApplication.Data" lazy="true">
<id name="Id" type="System.Int32">
<column name="Id" not-null="true"/>
<generator class="native"/>
</id>
<property name="Settings" type="Serializable">
<column name="Settings" not-null="true"/>
</property>
</class>
Run Code Online (Sandbox Code Playgroud)
它正在为数据库的列类型生成一个 varbinary(8000)。我怎样才能让它使用 varbinary(max)?
如果我使用:
<property name="Settings" type="Serializable" length="2147483647">
<column name="Settings" not-null="true"/>
</property>
Run Code Online (Sandbox Code Playgroud)
它也被截断为 8000。我使用的是 NHibernate3.2(不流畅)。
我正在尝试使用 .putExtra() 和 sendBroadcast() 将一些工作从 IntentService 发送到 BroadcastReceiver,所以我有自己的名为“Message”的类,它扩展了 HashMap<String,String> 并实现了 Serializable。
public class Message extends HashMap<String,String> implements Serializable{
public MessageID ID;
public int Encode(byte[] buff,int off);
public int Decode(byte[] buff,int off);
//...
}
Run Code Online (Sandbox Code Playgroud)
我是这样发送的:
public static void ProcessMessage(Message msg) {
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(Receiver.BROADCAST);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
broadcastIntent.putExtra("MESSAGE",(Serializable)msg);
parentService.sendBroadcast(broadcastIntent);
Print("Broadcasting intent to receiver ("+Receiver.BROADCAST+") from: "+parentService.toString());
}
Run Code Online (Sandbox Code Playgroud)
并像这样接收:
public void onReceive(Context context, Intent intent) {
Sys.Print("Receiver handling: "+intent.getAction());
if(intent.getAction().equals(BROADCAST)){
try {
Message msg = (Message) intent.getSerializableExtra("MESSAGE");
Sys.Print("Receiver handling " + …Run Code Online (Sandbox Code Playgroud) 如果一个类正在实现可序列化的接口,但writeObject/readObject代码库中的任何地方都没有方法实现怎么办?
默认方法是否defaultWriteObject/defaultReadObject会进行序列化?
是否只标记类implements Serializable足以序列化类?
如果是,那么什么正在被序列化,对象的状态在哪里被持久化?
我有一个包含九个文档的文档术语矩阵:
我正在运行代码如下:
import pyLDAvis.gensim
topicData = pyLDAvis.gensim.prepare(ldamodel, docTermMatrix, dictionary)
pyLDAvis.display(topicData)
Run Code Online (Sandbox Code Playgroud)
执行 pyLDAvis.display 函数时出现以下错误:
类型错误:“复杂”类型的对象不是 JSON 可序列化的
有人可以在这里指导吗?可能是什么原因?
那么我们还是在Silverlight 4中没有Serializable属性呢?我在互联网上有一些令人困惑的回答.当我尝试在我的代码中使用它时,我得到一个命名空间错误.这些是我的包括
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Runtime.Serialization;
Run Code Online (Sandbox Code Playgroud)
我将程序集System,System.Runtime.Serialization添加到我的项目中.
后续问题是,如果在Silverlight中不可用,我如何正确序列化单例?因为我打算使用这里给出的例子http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.aspx
谢谢
我有以下Hibernate代码返回错误.根据我的错误消息,我的查询结果无法强制转换为Serializable.谁能帮我?这是我的代码的相关部分.
Transaction tx = session.beginTransaction();
Query myQuery = session.createQuery("from Sec where month = '"
+ month + "' and stage = " + stage + " and ntech = '" + ntech
+ "' and rowval = " + rowval);
tx.commit();
// Error in next line
List<Sec> commentList = (List<Sec>) myQuery.list();
Iterator<Sec> iterator = (Iterator<Sec>) commentList.iterator();
sec = iterator.next();
return sec;
Run Code Online (Sandbox Code Playgroud)
这是我的错误日志:
java.lang.ClassCastException: model.Sec cannot be cast to java.io.Serializable
org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:759)
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:292)
org.hibernate.loader.Loader.doQuery(Loader.java:412)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
org.hibernate.loader.Loader.doList(Loader.java:1593)
org.hibernate.loader.Loader.list(Loader.java:1577)
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:395)
org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271)
org.hibernate.impl.SessionImpl.list(SessionImpl.java:844)
org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
dao.SecDAO.getRow(SecDAO.java:63) …Run Code Online (Sandbox Code Playgroud) 我想在不同的应用程序之间共享java对象.
只要我在不同的项目中使用相同的包名称,它就可以正常工作.但是,如果我更改包名称,它就不再起作用了.
我试图通过扩展ObjectInputStream类并重写readClassDescriptor方法来解决这个问题.
但通过这样做,我收到以下错误:
java.io.StreamCorruptedException: invalid type code: 00
Run Code Online (Sandbox Code Playgroud)
......不知道如何解决这个问题.
这是我用于扩展ObjectInputStream类的代码:
public class MyObjectInputStream extends ObjectInputStream {
public static Map<String, Class> classNameMapping = initclassNameMapping();
private static Map<String, Class> initclassNameMapping(){
Map<String, Class> res = new HashMap<String, Class>();
//ipxTest is the name of the package where the objects got serialized
res.put("ipxTest.IPX", interprojectxchangeTest.IPX.class);
res.put("ipxTest.A", interprojectxchangeTest.A.class);
return Collections.unmodifiableMap(res);
}
public MyObjectInputStream(InputStream in) throws IOException {
super(in);
enableResolveObject(true);
}
protected MyObjectInputStream() throws IOException, SecurityException {
super();
enableResolveObject(true);
}
@Override
protected java.io.ObjectStreamClass …Run Code Online (Sandbox Code Playgroud) serializable ×10
java ×6
hibernate ×2
android ×1
attributes ×1
blob ×1
cdi ×1
constructor ×1
gensim ×1
jpa ×1
jpa-2.0 ×1
json ×1
nhibernate ×1
receiver ×1
silverlight ×1
transient ×1
varbinary ×1